【发布时间】:2012-06-07 06:07:43
【问题描述】:
我有一个 jpanel 和内部 jpannels。
当我动态设置面板背景时,内部颜色不会改变。
初始化:
myPanel.setOpaque(true)
然后
myPanel.setBackground(...)
有没有一种解决方案可以在不循环或直接设置的情况下为所有内框设置背景?
谢谢。
【问题讨论】:
标签: java swing transparency jpanel
我有一个 jpanel 和内部 jpannels。
当我动态设置面板背景时,内部颜色不会改变。
初始化:
myPanel.setOpaque(true)
然后
myPanel.setBackground(...)
有没有一种解决方案可以在不循环或直接设置的情况下为所有内框设置背景?
谢谢。
【问题讨论】:
标签: java swing transparency jpanel
不,但如果您将内面板设置为不透明(透明),您可以直接更改外面板:
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);
}
【讨论】: