我在这里做错了什么?我有一个显示我的列表的 GUI,在另一个类中,我想在单击按钮时添加到列表中。单击按钮时,它会询问名称,但永远不会添加。
//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);
}
}
}
最佳答案
在您的 actionPerformed 方法中:
public void actionPerformed(ActionEvent arg0) {
LView pl = new LView(m); // **** here ****
pl.addPlayers();
rmv.switchViews(Views.LOB);
}
您正在上面指示的位置创建一个新的 LView 对象并在此 LView 对象上调用 addPlayers,但它不是当前正在显示的 LView 对象,因此应该不足为奇显示的 JList 未更新。
关键是获取对查看的 LView 对象的引用,并在这个 actionPerformed 方法中,在那个对象上调用这个方法。您如何执行此操作将取决于您未向我们展示的代码,但也许可以通过 RiskMasterView 对象获得它,但同样,鉴于您目前展示的内容,我不知道。
关于java - DefaultListModel 不添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8264280/