Tôi muốn thay đổi JButton
màu gradient, tôi thấy điều này, http://java2everyone.blogspot.com/2009/01/set-jbutton-gradient-color.html, nhưng tôi muốn thay đổi gradient cho chỉ có một nút, không phải tất cả nútThay đổi JButton màu gradient, nhưng chỉ cho một nút, không phải tất cả
Trả lời
Bạn có thể ghi đè lên các phương pháp paintComponent của JButton
dụ và vẽ đối tượng Graphics của nó với một trong các lớp sau đó thực hiện các giao diện Paint:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public final class JGradientButtonDemo {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
createAndShowGUI();
}
});
}
private static void createAndShowGUI() {
final JFrame frame = new JFrame("Gradient JButton Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new FlowLayout());
frame.add(JGradientButton.newInstance());
frame.setSize(new Dimension(300, 150)); // used for demonstration
//frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
private static class JGradientButton extends JButton {
private JGradientButton() {
super("Gradient Button");
setContentAreaFilled(false);
setFocusPainted(false); // used for demonstration
}
@Override
protected void paintComponent(Graphics g) {
final Graphics2D g2 = (Graphics2D) g.create();
g2.setPaint(new GradientPaint(
new Point(0, 0),
Color.WHITE,
new Point(0, getHeight()),
Color.PINK.darker()));
g2.fillRect(0, 0, getWidth(), getHeight());
g2.dispose();
super.paintComponent(g);
}
public static JGradientButton newInstance() {
return new JGradientButton();
}
}
}
Một cải tiến ít hơn MRE câu trả lời:
private static final class JGradientButton extends JButton{
private JGradientButton(String text){
super(text);
setContentAreaFilled(false);
}
@Override
protected void paintComponent(Graphics g){
Graphics2D g2 = (Graphics2D)g.create();
g2.setPaint(new GradientPaint(
new Point(0, 0),
getBackground(),
new Point(0, getHeight()/3),
Color.WHITE));
g2.fillRect(0, 0, getWidth(), getHeight()/3);
g2.setPaint(new GradientPaint(
new Point(0, getHeight()/3),
Color.WHITE,
new Point(0, getHeight()),
getBackground()));
g2.fillRect(0, getHeight()/3, getWidth(), getHeight());
g2.dispose();
super.paintComponent(g);
}
}
Làm thế nào người ta sẽ thực hiện điều này với một nút đó đã là một phần của một giao diện? Tôi có cần phải thay đổi người nghe hành động chút nào nếu tôi đã thêm nút này vào các nút không? Điều đó có thể không? Hoặc, câu hỏi hay hơn; nó là một câu hỏi hợp lý để hỏi ngay từ đầu? –
Nếu GUI đã có nút, phải có một số mã tạo nút đó (JButton b = new JButton ("bất cứ điều gì")). Để thay thế nút mặc định, bạn cần phải tạo một nút JGradientButton (JButton b = new JGradientButton ("bất cứ điều gì")) và thiết lập màu nền cho những gì bạn thích (b.setBackground (.. somecolor ...)). Mã còn lại trong GUI xử lý nút phải được giữ nguyên – luca
- 1. Chỉ tạo CSSing cho kiểu đầu vào - không phải cho tất cả đầu vào trong khi tôi không thể sử dụng thay đổi html ở tất cả
- 2. cách đặt màu của Jbutton
- 3. Làm thế nào để làm cho tất cả các nút JButton trông giống nhau khi thay đổi màu nền trên một số người trong số họ chứ không phải trên những người khác?
- 4. Thay đổi màu nền gradient trên Android khi đang chạy
- 5. Làm cách nào để đặt hình ảnh cho một số nhưng không phải tất cả các nút trong TreeView?
- 6. Cảnh báo là Lỗi, nhưng không phải tất cả
- 7. Chọn tất cả li nhưng không phải trẻ em
- 8. Nhấp chuột phải vào JButton
- 9. Thay đổi UIPopoverController màu (và nút màu sau)
- 10. Highchart - thay đổi màu của một nhãn x trục chỉ
- 11. nhập khẩu "cocos2d.h" hoạt động trong một số tác phẩm, nhưng không phải tất cả
- 12. Trường chỉ đọc Django chỉ khi thay đổi, nhưng không phải khi tạo
- 13. Tại sao BoxLayout không cho phép tôi thay đổi chiều rộng của JButton nhưng hãy để tôi thay đổi chiều cao?
- 14. màu nút thay đổi jquery onclick
- 15. Thay đổi màu nền của tất cả các phần tử có cùng một lớp
- 16. máy tính màu hex: thay đổi màu cho nút khởi động twitter
- 17. ActionBarSherlock Thay đổi màu nút quay lại?
- 18. Cách thay đổi màu chia chia mặc định cho tất cả ListViews
- 19. gtk (mm) 3 thay đổi màu nền của nút
- 20. chuyển chỉ dành cho các biên giới trên di chuột, nhưng không phải cho nền
- 21. Thay đổi màu nút trong AlertDialog
- 22. Cố gắng thay thế tất cả không gian màu trắng bằng một không gian đơn
- 23. hộp thông báo có nút "Có cho tất cả" và "Không cho tất cả"
- 24. Java - Swing - JTable - Đặt màu cho hàng đã chọn, nhưng không phải ô
- 25. Thay đổi độ mờ của tất cả các thành phần nhưng một Div
- 26. phong cách Android chỉ định nút màu
- 27. Làm thế nào để vẽ một màu gradient trong Android trên Canvas với màu sắc thay đổi?
- 28. css nút gradient background
- 29. Màu CSS Neo, nhưng không phải A: di chuột
- 30. CSS Gradient Opacity (không phải nền)
từ nên L & F nhạy cảm, nhưng vey đẹp 1 – mKorbel
giải pháp tốt nhất tôi đã tìm thấy trên SO –