gpt4 book ai didi

java - JFrame 大小在运行时无意中改变

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:06:05 24 4
gpt4 key购买 nike

我正在从事一个复杂的 Java Swing 项目。在初始化过程中,我将帧大小设置为 1280X1024。有时当我启动我的应用程序时,框架以预期的尺寸开始其他时候框架的实际大小是 1282X1053(总是这个大小)。

我有两个问题,同时试图查明此问题的根源。

1) 有没有办法在改变帧尺寸时设置观察点?我正在使用 Eclipse,当我尝试设置一个观察点时,当我拥有的每个组件改变大小时它就会中断。这是 Not Acceptable ,因为我有太多组件需要手动跟踪。

2) 由于问题并非每次都重现,我担心我可能在代码中的某处访问了 EDT 之外的 Java swing 组件。有没有办法验证我的代码中对所有 swing 组件的所有调用都是从 EDT 完成的?

编辑:下面的代码是我使用的示例。
我无法附加构建面板的代码,因为它太复杂,无法放在这里

编辑 2:下面的代码有效。问题是由于调用 setVisible 之前的注释行而发生的

package com.earlysense.nursestation;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class MyFrame extends JFrame {

private JPanel west;
private JPanel center;

/**
* Initializes the panels
*/
public void init() {

setLocation(0, 0);
setPreferredSize(new Dimension(1280, 1024));
setUndecorated(true); // The frame is fixed. It cannot be moved or resized.
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel p = new JPanel(new BorderLayout());
west = new JPanel();
west.add(new JLabel("west"));
center = new JPanel();
center.add(new JLabel("center"));
p.add(BorderLayout.WEST, west);
p.add(BorderLayout.CENTER, center);
getContentPane().add(p);
}

public static void main(String[] args) {
try {
SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
MyFrame frame = new MyFrame();
frame.init();
frame.pack();
// at this point frame.getSize() returns 1280X1024
// add components to west and center panel which depends on the frame size to set self size
frame.setVisible(true);
// at this point frame.getSize() sometimes returns 1282X1053
}
});
} catch (InterruptedException e) {/* Do nothing */

} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}

最佳答案

这似乎是 java 中的一个错误。在 Java 1.3 中已知,但显然仍然会发生。我正在使用 ubuntu 13.10 64 位,jdk:OpenJDK 运行时环境 (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu2.1) link

关于java - JFrame 大小在运行时无意中改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21300988/

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