我有一个jpanel和内部jpannels 当我动态设置面板背景时,内部颜色不会改变 到init:
myPanel.setOpaque(true)
然后
myPanel.setBackground(...)
是否有解决方案将背景设置为所有内框而不进行循环或直接设置? 谢谢。
答案 0 :(得分:4)
不,但如果您将内部面板设置为非透明(透明),则可以直接更改外部面板:
inner.setOpaque(false);
您可以随时使用可以使用的课程,而不是JPanel
:
class TransparentJPanel extends JPanel {
{
setOpaque(false);
}
}
完整示例:
static class TransparentJPanel extends JPanel {{
setOpaque(false);
}}
public static void main(String... args) throws Exception {
JFrame frame = new JFrame("Test");
final JPanel panel;
frame.add(panel = new JPanel() {{
add(new TransparentJPanel());
add(new TransparentJPanel());
add(new TransparentJPanel());
}}, BorderLayout.CENTER);
frame.add(new JButton(new AbstractAction("Toggle") {
@Override
public void actionPerformed(ActionEvent e) {
if (panel.getBackground().equals(Color.RED))
panel.setBackground(Color.GREEN);
else
panel.setBackground(Color.RED);
}
}), BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 300);
frame.setVisible(true);
}