gpt4 book ai didi

java - 奇怪的java窗口行为

转载 作者:行者123 更新时间:2023-12-02 00:43:55 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的桌面应用程序来管理帐户。我正处于开始阶段。

我在我的旧计算机上运行它,有时会出现奇怪的行为。

Java版本

java version "1.6.0_05" Java(TM) SE Runtime Environment (build 1.6.0_05-b13) Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing)

我的电脑配置

Microsoft Windows XP SP2 Intel(R) Celeron(R) CPU 2.53GHz 1.96GHz 736MB of RAM

我有奇怪的行为。当我编译程序并加载 jframe 时,有时会出现菜单,有时则不会出现如图所示的菜单。另外,当我尝试调整 jframe 的大小时,jframe 显示菜单。

我的代码

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.awt.AWTException;

public class Main {

public static void main(String[] args) {
new Login();
}

}

class Login extends JFrame{

private int height=450;
private int width=300;

private Container container;
private GridBagLayout layout;
private GridBagConstraints constraints;

JTextArea textArea1, textArea2;

public Login()
{
initWindow();
initMenu();
}

private void initWindow()
{
setVisible(true);
setSize(this.height, this.width);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Toolkit toolkit = Toolkit.getDefaultToolkit ();
Dimension dim = toolkit.getScreenSize();
setLocation((dim.width-this.width)/2, (dim.height-this.height)/2);

Image image = toolkit.createImage("account.gif");
setIconImage(image);
}

private void initMenu()
{
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);

JMenu fileMenu = new JMenu("File");
JMenu helpMenu = new JMenu("Help");

menuBar.add(fileMenu);
menuBar.add(helpMenu);

JMenuItem configureAction = new JMenuItem("Configure");
JMenuItem exitAction = new JMenuItem("Exit");

fileMenu.add(configureAction);
fileMenu.add(exitAction);

JMenuItem helpAction = new JMenuItem("Help");
JMenuItem aboutAction = new JMenuItem("About");

helpMenu.add(helpAction);
helpMenu.add(aboutAction);
}
}

没有菜单的窗口

No menu fig

带有菜单的窗口

enter image description here

任何改进代码的建议都将受到高度赞赏。

谢谢

最佳答案

请注意,由于传递的“事件”,您会得到这种不稳定的行为(而不是持续失败或持续成功)。例如,如果您将鼠标悬停在菜单栏所在的位置,或者更改窗口大小,您将看到“正确”绘制的位,因为底层图形堆栈检测到这些事件并标记受影响的区域以进​​行更新。

您还可以使用 repaint() 和/或 revalidate() 标记 GUI 组件进行更新。

请注意,上面并没有解释为什么您的代码不起作用,其原因如第一个答案所解释的那样,您在实现窗口之前使窗口可见。

其他一些提示:通过使用类似

的内容,确保所有 GUI 创建都发生在 AWT EventQueue 上是一个很好的做法
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
// call code which creates the GUI in here
}
}

或者 SwingUtilities.invokeLater() 版本。

此外,在使其可见之前在框架上调用 pack() 是一个好主意,因为这将使窗口尺寸正确并验证它们(如果没有这样的验证,滚动 Pane 例如,不会正确更新滚动条)。

关于java - 奇怪的java窗口行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5527837/

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