gpt4 book ai didi

java - JPanel 未在 JFrame 中显示 - Java

转载 作者:行者123 更新时间:2023-12-02 15:59:40 25 4
gpt4 key购买 nike

Server 是我创建的一个扩展 JFrame 的类。

    Server serverApp = new Server(TITLE, WIDTH, HEIGHT, true, false);

我已经有效地删除了几乎所有其他代码,但问题仍然存在!

    c = getContentPane();
c.setLayout(new BorderLayout());

//Components /***AHHHHH***/
lblEnterMessage = new JLabel("Enter Message ");
txtEnterMessage = new JTextField(50);
txtEnterMessage.addActionListener(this);
btnSend = new JButton("Send");
btnSend.addActionListener(this);
taDisplay = new JTextArea("Test, test test.", 10, 0);
taDisplay.setEditable(false);
JScrollPane jspDisplay = new JScrollPane(taDisplay);

pnlChatTop = new JPanel(new FlowLayout());
pnlChatTop.add(lblEnterMessage);
pnlChatTop.add(txtEnterMessage);
pnlChatTop.add(btnSend);
pnlChat = new JPanel(new BorderLayout());
pnlChat.add(pnlChatTop, BorderLayout.CENTER);
pnlChat.add(jspDisplay, BorderLayout.SOUTH);

c.add(pnlChat, BorderLayout.CENTER);

哦,天啊,它突然起作用了......我正要删除这个问题,但我又运行了几次,只是随机起作用,有时不起作用。

我只记得之前在其他“项目”中遇到过这个问题,我的解决方案是使窗口可调整大小。每当我简单地调整它的大小时,组件就会显示。

这一次,我正在制作一款游戏,但我不希望它调整大小......而且我想知道如何以正确的方式永久解决这个问题。

救命啊!有谁知道为什么会发生这种情况?

谢谢。

编辑:

public Server(String title, int sizeW, int sizeH, boolean visibility, boolean resizability) {

/* Initialization */
//JFrame settings
setTitle(title);
setSize(sizeW, sizeH);
setVisible(visibility);
setResizable(resizability);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addKeyListener(this);

这有帮助吗?

最佳答案

从您提供的代码来看,问题并不明显。

听起来您想要 pack() 的某种组合, setSize(int,int) , setExtendedState(int)和/或setResizable(boolean)调用 setVisible(true) 之前的方法.

<小时/>

编辑:

setTitle(title);
setSize(sizeW, sizeH);
setVisible(visibility);
setResizable(resizability);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

此代码中存在竞争条件。有时,主线程会让组件进入正确的状态,以便在框架显示之前进行绘制;有时,在一切准备就绪之前,框架获胜并开始绘画。

使用 Swing 的好处是您可以自动使用多线程代码。尽管在主线程上初始化控件通常是安全的,但一旦您导致事件调度线程启动(setVisible(true) 肯定会这样做),所有的赌注都将被取消。关闭。

尽可能延迟调用setVisible(true)。最好不要从 JFrame 构造函数中调用它。

如果您在启动应用程序后需要修改 Swing 控件,则需要通过事件调度线程来完成此操作(请参阅 invokeLaterSwingUtilities 等中的 invokeAndWait 方法。

关于java - JPanel 未在 JFrame 中显示 - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2167844/

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