Java Swing 中的 UIManager 工作不一致? / JOptionPane 消息背景
UIManager in Java Swing not working consistently? / JOptionPane Message Background
我正在尝试在我的自定义 JOptionPane 中设置背景颜色,但无论如何,我无法让选项窗格的消息部分更改颜色。
尝试 #1 是将窗格背景设置为不透明。
尝试 #2 还循环遍历窗格的组件,并设置不透明 and/or 背景属性(如果它们是 JPanel 或 JLabel)。
这对消息部分不起作用。据我所知,JPanel 甚至不作为组件之一存在。
尝试 #3 是使用 UIManager,但这并不能始终如一地工作。
我的意思是,如果你运行这个程序5次,有时背景颜色没有改变,有时全部改变,有时部分改变。
我在 invokeLater 线程中 运行ning。
UIManager.put("OptionPane.background",Color.white);
UIManager.put("JOptionPane.background",Color.white);
UIManager.put("Panel.background",Color.white);
UIManager.put("JPanel.background",Color.white);
有什么想法吗?
您可以使用以下解决方法:
JLabel messageLabel = new JLabel("Background is cyan!") {
/**
* {@inheritDoc}
*/
@Override
public void addNotify() {
super.addNotify();
if (getRootPane() != null) {
List<Component> children = findAllChildren(getRootPane());
for (Component comp : children) {
if (!(comp instanceof JButton)) {
comp.setBackground(Color.CYAN);
}
}
}
}
private List<Component> findAllChildren(Component aComp) {
List<Component> result = new ArrayList<Component>();
result.add(aComp);
if (aComp instanceof Container) {
Component[] children = ((Container) aComp).getComponents();
for (Component c : children) {
result.addAll(findAllChildren(c));
}
}
return result;
}
};
JOptionPane.showConfirmDialog(null, messageLabel, "Test title", JOptionPane.YES_NO_CANCEL_OPTION);
我正在尝试在我的自定义 JOptionPane 中设置背景颜色,但无论如何,我无法让选项窗格的消息部分更改颜色。
尝试 #1 是将窗格背景设置为不透明。
尝试 #2 还循环遍历窗格的组件,并设置不透明 and/or 背景属性(如果它们是 JPanel 或 JLabel)。
这对消息部分不起作用。据我所知,JPanel 甚至不作为组件之一存在。
尝试 #3 是使用 UIManager,但这并不能始终如一地工作。
我的意思是,如果你运行这个程序5次,有时背景颜色没有改变,有时全部改变,有时部分改变。
我在 invokeLater 线程中 运行ning。
UIManager.put("OptionPane.background",Color.white);
UIManager.put("JOptionPane.background",Color.white);
UIManager.put("Panel.background",Color.white);
UIManager.put("JPanel.background",Color.white);
有什么想法吗?
您可以使用以下解决方法:
JLabel messageLabel = new JLabel("Background is cyan!") {
/**
* {@inheritDoc}
*/
@Override
public void addNotify() {
super.addNotify();
if (getRootPane() != null) {
List<Component> children = findAllChildren(getRootPane());
for (Component comp : children) {
if (!(comp instanceof JButton)) {
comp.setBackground(Color.CYAN);
}
}
}
}
private List<Component> findAllChildren(Component aComp) {
List<Component> result = new ArrayList<Component>();
result.add(aComp);
if (aComp instanceof Container) {
Component[] children = ((Container) aComp).getComponents();
for (Component c : children) {
result.addAll(findAllChildren(c));
}
}
return result;
}
};
JOptionPane.showConfirmDialog(null, messageLabel, "Test title", JOptionPane.YES_NO_CANCEL_OPTION);