0

我正在尝试添加一个 JLabel,但问题是它要么卡在 jframe 的中间或左侧。

这是我的代码;

public class test extends JFrame{

    public test(){
        JLabel text = new JLabel("test")
        text.setLocation(100,100);
        setTitle("Help me");
        setSize(500,500);
        add(text);

    }
}

public class Runner{
    public static void main (String[] args){
         test a = new test();
    }
}
4

2 回答 2

1

每个容器都有一个布局管理器,它根据自己的规则设置它包含的元素的位置和大小。JFrame默认布局是BorderLayout,默认情况下把东西放在左边。

要绝对定位组件,您必须在每次添加/删除/修改组件时将布局管理器设置为null并明确调用。您还必须设置组件的大小,而不仅仅是它们的位置(例如,在一次调用中设置它们。repaint()JFramesetBounds

例如,以下代码可以满足您的要求:

public class Test extends JFrame {
    public Test() {

            // remove any layout manager.
        setLayout(null);

        setTitle("Help me");
        setSize(500, 500);

        JLabel text = new JLabel("test");
            // set size and position of component.
        text.setBounds(new Rectangle(100, 100, 200, 200));
            // add component.
        add(text);

            // explicitely call repaint().
        repaint();

    }


    public static void main(String[] args) {
        new Test().setVisible(true);
    }
}

有关更多信息,您可以查看有关在没有布局管理器的情况下工作的 Oracle 教程

编辑:我仍然建议您使用普通的布局管理器来实现您想要的,因为绝对定位所有内容通常很痛苦。

于 2013-10-25T17:01:06.053 回答
0
add(text);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
于 2013-10-25T16:57:00.763 回答