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 回答