gpt4 book ai didi

Java JFrame 拒绝刷新

转载 作者:行者123 更新时间:2023-11-30 09:48:36 28 4
gpt4 key购买 nike

我正在用 Java 制作一个大富翁游戏,但出于某种原因,我似乎无法刷新此 JFrame 弹出窗口。当我单击该按钮时,将出现弹出窗口,但当我关闭它并稍后在游戏中再次单击它时,它会继续显示第一个 JFrame 的功能。我假设每次单击按钮时都会创建一个全新的 JFrame,但我似乎无法刷新内容。我该如何解决这个问题?

final static JButton tradeButton = new JButton("Click to Trade Property");
tradeButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0){
final JPanel tradePanelcombo = new JPanel();
for(int x = 1; x< Player.Props.size(); x++)
{
if(x != Player.CurrentPlayer)
{
ArrayList<Property> props = Player.Props.get(x);
ArrayList<String> propnames = new ArrayList<String>();
for(Property prop : props)
{
propnames.add(prop.getName());
}
String[] strings = new String[propnames.size()];
for (int y = 0; y<propnames.size(); y++)
{
strings[y] = propnames.get(y);
}
JLabel confirmLabel = new JLabel("Player :" + x);
JComboBox petList = new JComboBox(strings);
petList.setPreferredSize(new Dimension(100, 150));

tradeFrame.add(confirmLabel);
tradePanelcombo.add(petList);
}
}
tradeFrame.add(tradePanelcombo, BorderLayout.PAGE_END);
tradeFrame.setPreferredSize(new Dimension(500,500));

tradeFrame.setResizable(true);
tradeFrame.pack();
tradeFrame.setVisible(true);
}
});

最佳答案

在我看来,每次都会创建一个新的框架和组件。

所以,如果框架没有更新,那么我猜那是因为您的属性没有更新,所以添加到组件的数据没有改变。

编辑:

您需要每次都创建一个新的 JFrame,或者您需要在添加新组件之前从框架中删除所有旧组件。

当您将组件添加到 BorderLayout 时,不会删除先前的组件。所以你实际上在容器中有两个组件。当 Swing 绘制组件时,它实际上以组件添加到容器中的相反顺序绘制组件(这就是 Z-Ordering 的工作原理)。

如果您删除 setResizable() 方法,然后调整框架的大小,我相信您应该会看到新组件开始显示,因为它们的大小应该随着框架大小的增加而增加。

关于Java JFrame 拒绝刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6165846/

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