我正在尝试在自定义的JOptionPane中设置背景颜色,无论如何,我都无法将选项窗格中的消息部分更改为颜色。
尝试#1是设置窗格背景和不透明。
尝试#2也是遍历窗格的组件,如果它们是JPanel或JLabel,则设置不透明和/或背景属性。
这对消息部分不起作用。从我所看到的,JPanel甚至不作为其中一个组件存在。
尝试#3是使用UIManager,但是这不能保持一致。
我的意思是,如果您要运行程序5次,有时候没有更改背景颜色,有时它们都会被更改,有时会更改其中一些。
我在invokeLater线程内运行。
boost::none
有什么想法吗?
答案 0 :(得分:2)
您可以使用以下解决方法:
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);