私はその中にjpanelと内部のjpannelsを持っています。
パネルの背景を動的に設定すると、内側の色が変わりません。
初期化する:
myPanel.setOpaque(true)
その後
myPanel.setBackground(...)
ループまたは直接設定せずにすべての内部フレームに背景を設定する解決策はありますか?
ありがとうございました。
私はその中にjpanelと内部のjpannelsを持っています。
パネルの背景を動的に設定すると、内側の色が変わりません。
初期化する:
myPanel.setOpaque(true)
その後
myPanel.setBackground(...)
ループまたは直接設定せずにすべての内部フレームに背景を設定する解決策はありますか?
ありがとうございました。
いいえ。ただし、内側のパネルを非不透明 (透明) に設定すると、外側のパネルを直接変更できます。
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);
}