我在java中做一个小Gui。我正在使用setBounds方法在我的JFrame上设置按钮等的位置,但问题是,当我使用它与JPanel按钮在JFrame上不可见,并且没有JPanel它相当正常,看到这两个代码,请帮助我作为我是初学者,面对这些愚蠢的问题。
这个工作正常
JFrame jframe = new JFrame("Working Fine");
jframe.setLayout(null);
JButton jbutton = new JButton("Position Test");
jbutton.setBounds(0, 0, 100, 100);
jframe.add(jbutton);
jframe.setSize(300,300);
jframe.setVisible(true);
相同的代码,当我添加按钮到Jpanel然后它不起作用所以什么是错的,请指导我
JFrame jframe = new JFrame("causing problem ");
jframe.setSize(300,300);
JPanel p = new JPanel();
jframe.setLayout(null);
JButton jbutton = new JButton("Position Test");
jbutton.setBounds(0, 0, 100, 100);
jframe.add(p);
p.add(jbutton);
p.setVisible(true);
//jframe.add(jbutton);
jframe.setVisible(true);
请帮我解决这个小问题
答案 0 :(得分:6)
问题在于,当您使用绝对定位时,JPanel
组件没有默认大小,因此不会出现。要让它出现,你可以做
JFrame frame = new JFrame("No Problem");
JPanel panel = new JPanel() {
@Override
public Dimension getPreferredSize() {
return new Dimension(300, 300);
};
};
panel.setLayout(new FlowLayout(FlowLayout.CENTER));
JButton button = new JButton("Position Test");
panel.add(button);
frame.add(panel);
frame.pack();
frame.setVisible(true);
来自Doing Without a Layout Manager
虽然可以不使用布局管理器,但是如果可能的话,应该使用布局管理器。布局管理器可以更轻松地调整依赖于外观的组件外观,不同的字体大小,容器的大小变化以及不同的区域设置。
布局管理器的选择取决于您希望如何布置组件。
答案 1 :(得分:5)
你必须摆脱JPanel的布局,以便设置绝对位置:
p.setLayout(空);