我正在使用Swing在Java中创建一个计算器。我已经开始制作一个窗口并且只有一个按钮用于排名第一。当我运行代码时,窗口从左上角开始,然后到达中心。我希望窗口出现在中心,没有小小的故障。
此外,除非我更改窗口的大小,否则有时按钮不会显示。如果没有发生这将是有益的。谢谢你的帮助。
import javax.swing.*;
public class Main{
public Main(){
JFrame frame = new JFrame("Calculator");
frame.setVisible(true);
frame.setSize(300, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
JPanel panel = new JPanel();
frame.add(panel);
JButton num1 = new JButton("1");
panel.add(num1);
}
public static void main(String args[]){
Main calc1 = new Main();
System.out.println("Starting Calculator");
}
}
答案 0 :(得分:2)
窗口的默认位置为0x0
所以,如果我们看看你的代码......
JFrame frame = new JFrame("Calculator");
frame.setVisible(true);
frame.setSize(300, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
所以,它不是Swing,它是你。
作为一般规则,你应该只在你做好充分准备后才能看到框架,可能更像......
JFrame frame = new JFrame("Calculator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.add(panel);
JButton num1 = new JButton("1");
panel.add(num1);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
您还应确保仅在事件调度线程的上下文中创建/修改UI元素,有关详细信息,请参阅Initial Threads
例如......
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
Main calc1 = new Main();
}
});
}
答案 1 :(得分:1)
您正在操作事件处理线程之外的Swing组件。
更改此内容并且您的大多数奇怪效果都会消失,请参阅Handling the Event Dispatch Thread以获取更多信息。