我已经尝试了setLocation(x,y)和setLocationRelativeTo(null),将JFrame的Layout设置为null但是没有用完。搜索时我发现这个问题已经被两三个人提出但他们已经完成了通过setLocation()和setLocationRelativeTo(null)。
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import java.awt.FlowLayout;
public class StartMenu{
JPanel startPanel;
JLabel title;
JButton startTest;
JButton exit;
JFrame menuFrame;
public StartMenu(){
menuFrame = new JFrame("Start Menu");
menuFrame.setLayout(null);
startPanel = new JPanel();
title = new JLabel("Adaptive Test",JLabel.CENTER);
title.setLocation(20,20);
startPanel.add(title);
startTest = new JButton("Start");
startTest.setLocation(40,40);
startPanel.add(startTest);
exit = new JButton("Exit");
exit.setLocation(100,100);
startPanel.add(exit);
menuFrame.setContentPane(startPanel);
menuFrame.setVisible(true);
menuFrame.setSize(500, 500);
menuFrame.setResizable(false);
menuFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
答案 0 :(得分:0)
您的JFrame
布局设置为空,但startPanel
的布局未设置为空。首先,使用:
startPanel.setLayout(null);
现在,使用component.setBounds(x, y, width, height)
代替component.setLocation(x, y)
,因此您还要为它们设置大小。
但正如评论中所说,最好使用layout managers而不是null布局。
答案 1 :(得分:-1)
首先将JFrame设置为null而不是JPanel,因此必须使用
startPanel.setLayout(null);
然后你应该使用setBounds而不是setLocation,如果你只是设置一个空布局管理器的位置,你可能在面板上看不到任何内容,因为默认情况下所有维度都被初始化为0。
所以,你可以像这样重写你的软件:
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class StartMenu{
JPanel startPanel;
JLabel title;
JButton startTest;
JButton exit;
JFrame menuFrame;
public StartMenu(){
menuFrame = new JFrame("Start Menu");
menuFrame.setLayout(null);
startPanel = new JPanel();
startPanel.setLayout(null);
title = new JLabel("Adaptive Test",JLabel.CENTER);
title.setBounds(20,20, 100, 30);
startPanel.add(title);
startTest = new JButton("Start");
startTest.setBounds(50,50, 100, 30);
startPanel.add(startTest);
exit = new JButton("Exit");
exit.setBounds(100,100, 100 ,30);
startPanel.add(exit);
menuFrame.setContentPane(startPanel);
menuFrame.setVisible(true);
menuFrame.setSize(500, 500);
menuFrame.setResizable(false);
menuFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
像这样你得到了一些有用的东西,但是手动设置软件中的所有位置和大小并不是一个很好的编程习惯,因为它在不同的系统上不能很好地工作(因此它不可移植)而你当你的软件开始增长数十甚至数百个图形元素时,你也会发现自己陷入调试的噩梦。
我的建议是使用gridBagLayout,起初我看起来很晦涩,但相信我,事实并非如此!