Java Swing添加组件问题

时间:2017-11-13 12:34:12

标签: java swing label

我正在接近Swing java库的研究。 以下简单代码"在大多数情况下"不起作用(参见下面的图1)(label1以某种方式消失或根本不添加到contentPane 它很少有效(我必须多次运行并停止以获得正确的结果)。 (图2) 有时没有显示。 (PIC3)

我知道它应该由布局管理员处理,但我有兴趣了解它为什么会发生而不是解决这个问题。

我在Eclipse 7和8.1上都遇到过这个问题

THX

public static void main(String[] args){
    // TODO Auto-generated method stub
    JFrame finestra=new JFrame("frame title");
    finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    finestra.setBounds(0, 0, 300, 700);
    finestra.setVisible(true);

    JLabel label1=new JLabel("label 1");
    finestra.add(label1);

    JLabel label2=new JLabel("label 2");
    finestra.add(label2);   
}

PIC1: https://i.stack.imgur.com/GI1xf.jpg]

PIC2: https://i.stack.imgur.com/XaWON.jpg]

PIC3: https://i.stack.imgur.com/SvUoy.jpg]

1 个答案:

答案 0 :(得分:0)

JFrame.add(Component)将给定组件添加到JFrame内容窗格的“center”。因此,当您添加label1时,它会添加到“center”。当你添加label2时,它会替换“center”中的label1。这就是为什么你最终只得到label2。请尝试以下代码并查看:

public class Test
{
  public static void main(String[] args)
  {
    JFrame finestra=new JFrame("frame title");
    finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    finestra.setBounds(0, 0, 300, 700);

    JLabel label1=new JLabel("label 1");
    finestra.add(label1, BorderLayout.NORTH);

    JLabel label2=new JLabel("label 2");
    finestra.add(label2, BorderLayout.CENTER);

    // Call setVisible(true) after labels are layed out.
    finestra.setVisible(true);
  }
}