0
这是整个类的摘录,基本上我在类中声明了一个JList和一个DefaultListModel,并创建一个包含一些按钮和一个列表框的JFrame。单击roomsButton时,listbox将由hotel.displayRoomsAvailable()函数填充一些选项,并且leftButton将设置为可见和指定的功能。这个列表框正在用函数的返回正确填充,但是,当我点击leftButton时,list.getSelectedIndex()总是返回-1,我试过使用getSelectedValue(),但它返回null。我做错了什么,不能识别列表中选择的适当值。这里只有2列表中的值,所以我不认为这有什么关系具有ScrollPane或可见等Java JList.getSelectedIndex()总是返回-1
private JList<String> list;
private static DefaultListModel listModel;
listModel = new DefaultListModel();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.setLayout(new BorderLayout());
JPanel cusPanel = new JPanel();
list = new JList(listModel);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setPreferredSize(new Dimension(400, 200));
cusPanel.add(list);
frame.add(cusPanel, BorderLayout.CENTER);
JButton roomsButton = new JButton("Display Rooms");
roomsButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
listModel.clear();
String startd = start.getText();
String endd = end.getText();
LocalDate startdate = LocalDate.parse(startd, DateTimeFormat.forPattern("MM/dd/yyyy"));
LocalDate enddate = LocalDate.parse(endd, DateTimeFormat.forPattern("MM/dd/yyyy"));
hotel.displayRoomsAvailable(startdate,enddate);
list = new JList(listModel);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.setPreferredSize(new Dimension(400, 200));
leftButton.setText("Reserve Room");
leftButton.setVisible(true);
leftButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent event)
{
System.out.println(list.getSelectedIndex());
//hotel.bookRoom(true, ID, list.getSelectedValue(), startdate, enddate);
}
});
}
});
我以为列表对象的工作方式不同,哈哈。我认为它只是根据创建时listModel中的内容创建了列表,并且除非重新创建对象,否则它不会更改。谢谢。完整的修复 – user3027875 2015-04-04 07:04:50