Tôi có một ListCellRenderer tùy chỉnh và muốn sử dụng màu nền màu lựa chọn mặc định của Nimbus. Tôi có thể tra cứu màu bằng:Làm cách nào để sử dụng màu Nimbus mặc định với UIManager?
Color selectionBackground = UIManager.getColor("nimbusSelectionBackground");
và nếu tôi in, nó có cùng giá trị như trên Nimbus default colors. Nhưng khi tôi sử dụng nó trên một JPanel tôi nhận được một màu xám khác nhau, làm thế nào tôi có thể sử dụng màu sắc từ UIManager?
Khi tôi làm:
setBackground(Color.RED);
Các JPanels backround được thể hiện trong màu đỏ, nhưng khi tôi làm:
setBackground(selectionBackground);
Các "selectionBackground" màu sắc là không sử dụng, nhưng một màu xám .
Dưới đây là một ví dụ và ảnh chụp màn hình:
Nền nên là:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UIManager.LookAndFeelInfo;
public class PanelColor {
public static void main(String[] args) {
// switch to Nimbus Look And Feel
for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
try {
UIManager.setLookAndFeel(info.getClassName());
} catch (Exception e) { e.printStackTrace(); }
break;
}
}
Color selectionBackground = UIManager.getColor("nimbusSelectionBackground");
JPanel panel = new JPanel(new BorderLayout());
panel.setPreferredSize(new Dimension(300,50));
panel.add(new JLabel(selectionBackground.toString()), BorderLayout.NORTH);
// is not showing the selectionBackground color
panel.setBackground(selectionBackground);
JFrame frame = new JFrame();
frame.add(panel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Có thể câu hỏi sau đây có thể giúp bạn với Nimbus - http://stackoverflow.com/questions/5840599/jbutton-background-on-nimbus-laf? –
Wow, rất kỳ quặc. Tôi đã kiểm tra mã: màu được trả về là kiểu javax.swing.plaf.ColorUIResource. Nhưng tôi không thấy làm thế nào mà có thể gây ra bất kỳ vấn đề vì nó là một phân lớp của màu. Không có gì đặc biệt trong mã của ColorUIResource, không có tham chiếu đến giao diện người dùng hoặc bất kỳ thứ gì. Như Joey đã đề xuất, 'selectionBackground = new Color (selectionBackground.getRGB());' hoạt động. – toto2