2015-04-04 176 views
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); 
      } 
     }); 
    } 
}); 

回答

1

你創造你`actionPerformed方法JList一個新的實例,但從來沒有將它添加到屏幕上,因此,它永遠不能被選中......

public void actionPerformed(ActionEvent event) 
    { 
     //... 
     list = new JList(listModel); 
     //... 
     leftButton.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent event) 
      {     
       System.out.println(list.getSelectedIndex()); 
       //hotel.bookRoom(true, ID, list.getSelectedValue(), startdate, enddate); 
      } 
     }); 
    } 

坦率地說,我不明白你爲什麼會...

+0

我以爲列表對象的工作方式不同,哈哈。我認爲它只是根據創建時listModel中的內容創建了列表,並且除非重新創建對象,否則它不會更改。謝謝。完整的修復 – user3027875 2015-04-04 07:04:50