DefaultListModel не добавляет элемент - PullRequest
1 голос
/ 25 ноября 2011

Что я здесь не так делаю? У меня есть графический интерфейс, который отображает мой список, и в другом классе я хочу добавить в список при нажатии кнопки. Когда кнопка нажата, она запрашивает имя, но оно никогда не добавляется.

//class with GUI
public class LView extends MasterViewPanel {

    private JList players, square;
    private DefaultListModel playerModel;
    private LobbyModel lm;
    private Player pl;

    public LView(RiskMasterView m) {
        super(m);

        setUpLists();

    }

    private void setUpLists() {// create list specify size, location.
        playerModel = new DefaultListModel();
        players = new JList(playerModel);
        players.setSize(150, 250);
        players.setLocation(535, 200);


        this.add(players);

        //add players
    }

    public void addPlayers() {
        String name = JOptionPane.showInputDialog(playerModel, "Enter Name");
        playerModel.addElement(name);

    }
}

//class with with button to add to the list 
public class TView extends MasterViewPanel {

    RiskMasterView rmv;

    public TView(RiskMasterView m) {
        super(m);
        rmv = m;
        setUpGui();
    }

    private class LListener implements ActionListener {

        public void actionPerformed(ActionEvent arg0) {
            LView pl = new LView(m);
            pl.addPlayers();
            rmv.switchViews(Views.LOB);
        }
    }
}

1 Ответ

3 голосов
/ 25 ноября 2011

Вот ваш метод actionPerformed:

    public void actionPerformed(ActionEvent arg0) {
        LView pl = new LView(m); // **** here ****
        pl.addPlayers();
        rmv.switchViews(Views.LOB);
    }

Вы создаете новый объект LView в месте, указанном выше, и вызываете addPlayers для этого объекта LView, но это не объект LView, который отображается в данный момент, поэтому неудивительно, что отображаемый JList не обновляется.

Ключ должен получить ссылку на просмотренный объект LView, и в этом методе actionPerformed вызовите этот метод для этого объекта. То, как вы это сделаете, будет зависеть от кода, который вы нам не показывали, но, возможно, его можно получить с помощью объекта RiskMasterView, но, опять же, я не знаю, учитывая то, что вы пока показали.

...