我正在尝试添加一个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();
}
}
答案 0 :(得分:1)
每个容器都有一个布局管理器,它根据自己的规则设置它包含的元素的位置和大小。 JFrame
默认布局为BorderLayout
,默认设置在左侧。
要绝对定位组件,您必须将布局管理器设置为null
,并在每次添加/删除/修改组件时明确调用repaint()
上的JFrame
。您还必须设置组件的大小,而不仅仅是它们的位置(例如setBounds
用于在一次调用中设置它们。
例如,以下代码可以满足您的需求:
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 tutorial on working without a layout manager。
编辑:我仍然建议您使用普通的布局管理器来实现您想要的效果,因为绝对定位所有内容通常都会让您感到痛苦。
答案 1 :(得分:0)
add(text);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);