Java Swing 元素每次运行时都会更改
Java Swing elements change every runtime
所以我用java的swing库做了一个程序。我制作了一个绘制方程式的程序,如果相关的话,这里是主要方法:
public static void main(String[] args) throws Exception {
JFrame frame= new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setLayout(new GridLayout(1,2));
GraphPanel gp = new GraphPanel();
GraphPanel gp2 = new GraphPanel();
//gp.functs.add(new Function(Phrase.createPhrase("2(25-x^2)^(1/2)")));
//gp.functs.add(new Function(Phrase.createPhrase("-1.1((25-x^2)^(1/2))")));
gp.functs.add(new Function(Phrase.createPhrase("x^2")));
//gp.functs.add(new Function(Phrase.createPhrase("-4/x^2+6")));
gp2.functs.add(new Function(Phrase.createPhrase("sinx")));
frame.add(gp);
frame.add(gp2);
frame.pack();
frame.setSize(800, 800);
//gp.setBorder(BorderFactory.createLineBorder(Color.RED));
gp.setBounds(100, 100, 700, 700);//I WANT THIS TO ALWAYS RUN
}
我 运行 在不更改任何部分的情况下试运行程序两次,这就是它的样子:
然后下一次我运行它:
如果相关,GraphPanel 是 JLabel 类型。
我知道如果我使用 null 绝对 LayoutManager,它将始终有效。但我只是想知道为什么 swing 中有这样的不一致之处。我以前注意到过这样的事情,但我认为这只是程序中的一些错误。为什么是这样?
提前致谢!
- 首先将
frame.setVisible(true);
移动到 main
方法的末尾
- 这个
gp.setBounds(100, 100, 700, 700);
毫无意义,因为 gp
受布局管理器 (GridLayout
) 控制
- 没有必要同时使用
path
和 setSize
,pack
通常是更安全的选择,但这取决于您的组件是否正确覆盖 getPreferredSize
But I'm just wondering why swing has such inconsistencies in it. I've noticed stuff like this before but I though it was just some error in the program. Why is this?
主要是因为您没有正确使用 API。由于 JFrame
物理连接到本机对等体的方式,当您到达 gp.setBounds
.
时,该框架可能会或可能不会在屏幕上显示。
此外,由于您是在 "main" 线程而不是事件调度线程中完成所有工作,因此 运行 它们之间存在竞争条件的风险,请参阅 Initial Threads了解更多详情。
Swing 非常灵活,当您做错事(或做错事)时,它也是无情的
所以我用java的swing库做了一个程序。我制作了一个绘制方程式的程序,如果相关的话,这里是主要方法:
public static void main(String[] args) throws Exception {
JFrame frame= new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.setLayout(new GridLayout(1,2));
GraphPanel gp = new GraphPanel();
GraphPanel gp2 = new GraphPanel();
//gp.functs.add(new Function(Phrase.createPhrase("2(25-x^2)^(1/2)")));
//gp.functs.add(new Function(Phrase.createPhrase("-1.1((25-x^2)^(1/2))")));
gp.functs.add(new Function(Phrase.createPhrase("x^2")));
//gp.functs.add(new Function(Phrase.createPhrase("-4/x^2+6")));
gp2.functs.add(new Function(Phrase.createPhrase("sinx")));
frame.add(gp);
frame.add(gp2);
frame.pack();
frame.setSize(800, 800);
//gp.setBorder(BorderFactory.createLineBorder(Color.RED));
gp.setBounds(100, 100, 700, 700);//I WANT THIS TO ALWAYS RUN
}
我 运行 在不更改任何部分的情况下试运行程序两次,这就是它的样子:
然后下一次我运行它:
如果相关,GraphPanel 是 JLabel 类型。 我知道如果我使用 null 绝对 LayoutManager,它将始终有效。但我只是想知道为什么 swing 中有这样的不一致之处。我以前注意到过这样的事情,但我认为这只是程序中的一些错误。为什么是这样? 提前致谢!
- 首先将
frame.setVisible(true);
移动到main
方法的末尾 - 这个
gp.setBounds(100, 100, 700, 700);
毫无意义,因为gp
受布局管理器 (GridLayout
) 控制
- 没有必要同时使用
path
和setSize
,pack
通常是更安全的选择,但这取决于您的组件是否正确覆盖getPreferredSize
But I'm just wondering why swing has such inconsistencies in it. I've noticed stuff like this before but I though it was just some error in the program. Why is this?
主要是因为您没有正确使用 API。由于 JFrame
物理连接到本机对等体的方式,当您到达 gp.setBounds
.
此外,由于您是在 "main" 线程而不是事件调度线程中完成所有工作,因此 运行 它们之间存在竞争条件的风险,请参阅 Initial Threads了解更多详情。
Swing 非常灵活,当您做错事(或做错事)时,它也是无情的