1

私はその中にjpanelと内部のjpannelsを持っています。
パネルの背景を動的に設定すると、内側の色が変わりません。
初期化する:

 myPanel.setOpaque(true)

その後

 myPanel.setBackground(...)

ループまたは直接設定せずにすべての内部フレームに背景を設定する解決策はありますか?
ありがとうございました。

4

1 に答える 1

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);
}
于 2012-06-07T06:09:49.510 に答える