布局不受panel.setBackGround(Color。)影响

时间:2019-01-08 18:03:09

标签: java swing

我有以下代码,结果如图片所示(我未添加代码的重复部分)。面板以某种方式变色,但是布局设计的一部分。我想念什么?

class Elements extends JPanel {

Elements() {

    setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.insets = new Insets(10, 10, 10, 10);

    JLabel l1 = new JLabel("l1");
    c.gridx = 0;
    c.gridy = 0;
    add(l1, c);
    JLabel l2 = new JLabel("l2");
    c.gridx = 0;
    c.gridy = 1;
    add(l2, c);
}

public class MyFrame extends JFrame {

public static void main(String[] args) {

    JFrame frame = new JFrame("Simple Calc");
    JPanel p = new JPanel();
    Elements elements = new Elements();
    frame.add(p);
    p.add(elements);        
    frame.setSize(1000, 500);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    p.setBackground(Color.blue);

enter image description here

2 个答案:

答案 0 :(得分:2)

您的Elements类扩展了JPanel。您会看到JPanel的默认颜色,因为您没有设置颜色。

您可以执行以下任一操作:

elements.setBackground( Color.BLUE );

专门设置背景。

elements.setOpaque( false );

使该面板透明,以便您看到其父面板的背景。这很容易,因此如果您决定更改背景,则不必两次设置背景。

答案 1 :(得分:1)

在面板p中,元素位于前景中。尝试做elements.setBackground(Color.blue);来实现所需的行为。