2014-11-02 100 views
0

我的任務是使用JOptionPane顯示一個對話框,該對話框顯示JTable上所選產品的信息。如何在JTable中使用監聽器?

我使用這個監聽器,但我不確定它是否正確使用?

table.getModel().addTableModelListener(new TableModelListener() 
      { 
       public void tableChanged(TableModelEvent e) 
       { 
        //code for JOptionPane? 
       } 
       }); 

我完成了除了顯示對話框部分之外的所有內容。這是我的代碼到目前爲止。我在正確的軌道上嗎?

這是我的代碼。

public class Table { 

    public static void main(String[] args) 
    { 
     Runnable r = new Runnable() { 

      public void run() { 
       new Table().createUI(); 
      } 
     }; 

     EventQueue.invokeLater(r); 
    } 

    private void createUI() { 

     try { 
      JFrame frame = new JFrame(); 
      frame.setLayout(new BorderLayout()); 
      JTable table = new JTable(); 

      String readLine = null; 

      TableModel tableModel = new TableModel(); 
      File file = new File("Products.csv"); 

      FileReader reader = new FileReader(file); 
      BufferedReader bufReader = new BufferedReader(reader); 

      List<Products> studentList = new ArrayList<Products>(); 
      while((readLine = bufReader.readLine()) != null) { 
       String[] splitData = readLine.split(","); 

       Products products = new Products(); 
       products.setName(splitData[0]); 
       products.setNumber(splitData[1]); 
       products.setPrice(splitData[2]); 

       studentList.add(products); 
      } 

      tableModel.setList(studentList); 
      table.setModel(tableModel); 
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      frame.add(new JScrollPane(table)); 
      frame.setTitle("Lab 5"); 
      frame.pack(); 
      frame.setVisible(true); 

      table.getModel().addTableModelListener(new TableModelListener() 
      { 
       public void tableChanged(TableModelEvent e) 
       { 
        //code for JOptionPane? 
       } 
       }); 

     } catch(IOException ex) {} 
    } 

    class Products { 

     private String name; 
     private String number; 
     private String price; 

     public String getPrice() { 
      return price; 
     } 
     public void setPrice(String price) { 
      this.price = price; 
     } 

     public String getName() { 
      return name; 
     } 
     public void setName(String name) { 
      this.name = name; 
     } 
     public String getNumber() { 
      return number; 
     } 
     public void setNumber(String number) { 
      this.number = number; 
     } 
    } 

    class TableModel extends AbstractTableModel 
    { 
     private List<Products> list = new ArrayList<Products>(); 
     private String[] columnNames = {"Barcode", "Name","Price"}; 

     public void setList(List<Products> list) { 
      this.list = list; 
      fireTableDataChanged(); 
     } 

     @Override 
     public String getColumnName(int column) { 
      return columnNames[column]; 
     } 

     public int getRowCount() { 
      return list.size(); 
     } 

     public int getColumnCount() { 
      return columnNames.length; 
     } 

     public Object getValueAt(int rowIndex, int columnIndex) { 
      switch (columnIndex) { 
      case 0: 
       return list.get(rowIndex).getName(); 
      case 1: 
       return list.get(rowIndex).getNumber(); 
      case 2: 
       return list.get(rowIndex).getPrice(); 
      default: 
       return null; 
      } 
     } 
    } 
} 
+1

添加監聽器表中的[選擇模型(http://docs.oracle.com/javase/8/docs/api/使用javax /鞦韆/ JTable.html#getSelectionModel--)。有關詳細信息和工作代碼,請參見[如何使用表格:用戶選​​擇](http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#selection)。 – 2014-11-02 10:05:40

回答

0

您必須添加選擇監聽:

table.getSelectionModel().addListSelectionListener(
        new ListSelectionListener() { 
         public void valueChanged(ListSelectionEvent event) { 
          int selectedRow = table.getSelectedRow(); 
          JOptionPane.showMessageDialog(
            frame, 
            "Selected product: " 
              + table.getModel().getValueAt(
                selectedRow, 0)); 
         } 
        });