Java 我正在尝试从jList中删除项目
我对Java非常陌生,已经使用VisualBasic好几年了。我已经使用NetBeans创建了一个基本的GUI。它包含一个名为lstMain的jList。我已经创建了一个名为LISTMODEL的DefaultListModel,我可以向jList添加字符串项。当我尝试使用删除项目时Java 我正在尝试从jList中删除项目,java,swing,jlist,Java,Swing,Jlist,我对Java非常陌生,已经使用VisualBasic好几年了。我已经使用NetBeans创建了一个基本的GUI。它包含一个名为lstMain的jList。我已经创建了一个名为LISTMODEL的DefaultListModel,我可以向jList添加字符串项。当我尝试使用删除项目时 int M = lstMain.getSelectedIndex(); LISTMODEL.remove(M); 奇怪的事情发生了。有时列表项被删除,只剩下一项。这就是我所期望的。有时列表项似乎保持不变,但最后一项
int M = lstMain.getSelectedIndex();
LISTMODEL.remove(M);
奇怪的事情发生了。有时列表项被删除,只剩下一项。这就是我所期望的。有时列表项似乎保持不变,但最后一项不可访问。如果我点击一个可访问的项目,它就会变成我所期望的——即下一个项目是什么。有时项目确实会更改,但最后一个项目仍然无法访问。这与VisualBasic列表框的易用性似乎相差甚远。有人能告诉我发生了什么吗?确保您对listModel的更改正在事件调度线程EDT中进行 具体而言,使用以下术语:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
int M = lstMain.getSelectedIndex();
LISTMODEL.remove(M);
}
});
适合我-试试这个SSCCE:
public class SimpleList
{
public static void main(String[] args)
{
JFrame frame = new JFrame("List example");
final DefaultListModel model = new DefaultListModel();
model.addElement("Hello");
model.addElement("World");
final JList list = new JList(model);
frame.add(list, BorderLayout.CENTER);
JButton remove = new JButton("Remove");
remove.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
int sel = list.getSelectedIndex();
if (sel >= 0)
{
model.removeElementAt(sel);
}
}
});
frame.add(remove, BorderLayout.SOUTH);
frame.pack();
frame.setVisible(true);
}
}
请阅读。由于您是Java新手,请阅读本文。这是非常推荐的。请发布@twall无需手动使任何内容无效-模型将通知其侦听器,所有内部更新将自动进行:-当您阅读和学习时-请学习java命名约定并遵守它们:-是-尽管您正在触发从JButton移除,例如,那么你就已经在EDT中了,所以不需要调用器了。请学习java命名约定并坚持使用它们。我是mir jetzt nicht verkneifen aka SCNR:-@kleopatra Steve引用了OP的代码,所以这有点苛刻@DNA我知道这一点,正如你在我的评论结尾所看到的,没有严厉的意思:-另一方面,我认为有经验的开发人员不应该简单地引用新手问题中的坏风格,而是纠正最明显的错误,并暗示他们为什么会改变it@kleopatra好的,对不起,完全错过了SCNR!