Java JFrame отказывается обновлять - PullRequest
2 голосов
/ 29 мая 2011

Я делаю монопольную игру на Java и по какой-то причине не могу обновить это всплывающее окно JFrame.Когда я нажимаю кнопку, появляется всплывающее окно, но когда я закрываю его и снова нажимаю на него в игре, оно продолжает показывать особенности 1-го 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);
            }
        });

1 Ответ

2 голосов
/ 29 мая 2011

Мне кажется, что каждый раз создаются новый каркас и компоненты.

Итак, если фрейм не обновляется, то, я думаю, это происходит потому, что ваши Свойства не обновляются, поэтому данные, добавляемые в компоненты, не изменяются.

Edit:

Вам необходимо каждый раз создавать новый JFrame или удалять все старые компоненты из фрейма перед добавлением новых компонентов.

Когда вы добавляете компонент в BorderLayout, предыдущий компонент не удаляется. Таким образом, у вас есть два компонента в контейнере. Когда Swing рисует компоненты, он фактически рисует компоненты в обратном порядке, в котором они были добавлены в контейнер (так работает Z-упорядочение).

Если вы удалите метод setResizable (), а затем измените размер фрейма, я думаю, вы должны увидеть, как новые компоненты начинают показывать, учитывая, что они должны увеличиваться в размере с увеличением размера фрейма.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...