java swing - 将面板和背景中的所有面板设置为背景

时间:2012-06-07 06:07:43

标签: java swing transparency jpanel

我有一个jpanel和内部jpannels 当我动态设置面板背景时,内部颜色不会改变 到init:

 myPanel.setOpaque(true)

然后

 myPanel.setBackground(...)

是否有解决方案将背景设置为所有内框而不进行循环或直接设置? 谢谢。

1 个答案:

答案 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);
}