即使布局为空,如何将标签设置为可见?此外,JFrame大小仍默认为最小值

时间:2015-10-08 16:44:16

标签: java layout jframe jbutton jlabel

这就是我的代码目前的样子:

public TestFrame(){
    setSize(x1, y1); /*where these are already defined*/
    setLayout(new FlowLayout());
    JLabel label = new JLabel("text");
    label.setBorders(BorderFactory.createLineBorder(Color.BLUE));
    label.setFont(new Font("Times New Roman", PLAIN, 14));
    label.setSize(width, height);
    label.setLocation(x, y)
    /* where these four variables are already defined */
    JButton testButton = new JButton("TestButton");
    testButton.setSize(bwidth, bheight);
    testButton.setLocation(bx, by);
    add(label);
    setVisible(true);
}

这主要是给我一个问题,因为这是一个FlowLayout,它将TestFrame的大小设置为最小,并且不会将标签或按钮放在正确的大小或位置。 有人告诉我,我需要将布局设置为null,如下所示:

setLayout(null);

这里的主要问题是,虽然这确实将按钮放在应该的位置,但它不会自动将TestFrame的大小设置为指定的大小,并且当标签可见时,显示正确的字体和大小所述字体,围绕整个文本的边框,将布局设置为null使标签完全消失。

是否有完全消失的解释?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

尝试用setBounds(x,y,width,height)替换setSize和setLocation; null布局非常奇怪,我建议你使用LayoutManagers。

答案 1 :(得分:0)

  

因为这是一个FlowLayout,它将TestFrame的大小设置为最小值

不,FlowLayout会尊重每个组件的首选大小。

  

不会将标签或按钮放在正确的尺寸或位置。

这是因为您的代码结构错误。您正在使用setSize(...)方法,这意味着布局管理员无法正常工作。

代码的基本结构应该是:

setLayout( new FlowLayout() );
...
add(label);
...
add(button);
pack(); // this will invoke the layout managers and size the frame correctly.
setVisible(true);