我正在使用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);
}
});
答案 0 :(得分:2)
在我看来,每次都会创建一个新的框架和组件。
所以,如果框架没有更新,那么我想这是因为你的属性没有更新所以添加到组件的数据不会改变。
编辑:
每次都需要创建一个新的JFrame,或者在添加新组件之前需要从框架中删除所有旧组件。
将组件添加到BorderLayout时,不会删除上一个组件。所以你实际上在容器中有两个组件。当Swing绘制组件时,它实际上以与添加到容器相反的顺序绘制组件(这就是Z-Ordering的工作方式)。
如果你删除了setResizable()方法,然后调整框架的大小,我相信你应该看到新组件开始显示,因为它们应该随着框架大小的增加而增加。