gpt4 book ai didi

Java Swing 元素每次运行时都会发生变化

转载 作者:行者123 更新时间:2023-12-01 21:49:59 25 4
gpt4 key购买 nike

所以我使用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

}

我在没有更改任何部分的情况下对该程序进行了两次试运行,结果如下:

enter image description here

然后下次我运行它时:

Second run

如果相关,GraphPanel 的类型为 JLabel。我知道如果我使用 null 绝对 LayoutManager,它将始终有效。但我只是想知道为什么 swing 有如此不一致的地方。我以前注意到过类似的事情,但我认为这只是程序中的一些错误。为什么是这样?提前致谢!

最佳答案

  • 首先将 frame.setVisible(true); 移动到 main 方法的末尾
  • 这个 gp.setBounds(100, 100, 700, 700); 是没有意义的,因为 gp 是在布局管理器 (GridLayout)
  • 同时使用 pathsetSize 是没有意义的,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 物理连接到 native 对等点的方式,当您到达 gp.setBounds 时,该框架可能会或可能不会在屏幕上实际可见。 .

此外,由于您是在“主”线程而不是事件调度线程中完成所有工作,因此您面临着它们之间出现竞争条件的风险,请参阅 Initial Threads了解更多详情。

Swing 非常灵活,当你做错事(或以错误的方式做事)时,它也是不可原谅的

关于Java Swing 元素每次运行时都会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35375484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com