2016-06-13 52 views
0

我有一個JTable,如下圖所示。當單擊行時,我希望它顯示所有選定的行值。獲取JTable中的選定行

enter image description here

viewMovie

public class viewMovie extends javax.swing.JFrame { 

     public viewMovie() throws Exception { 
      initComponents(); 
      populateJTable(); 
     } 

     // create a methode to populate data Into JTable from Mysql database And Displaying Picture 

     public void populateJTable() throws Exception{ 
      MyQuery mq = new MyQuery(); 
      ArrayList<Movie> list = mq.BindTable(); 
      String[] columnName = {"Title","Date","Time","Price","Hall","Description","Image"}; 
      Object[][] rows = new Object[list.size()][8]; 
      for(int i = 0; i < list.size(); i++){ 
       //rows[i][0] = list.get(i).getID(); 
       rows[i][0] = list.get(i).getTitle(); 
       rows[i][1] = list.get(i).getDate(); 
       rows[i][2] = list.get(i).getTime(); 
       rows[i][3] = list.get(i).getPrice(); 
       rows[i][4] = list.get(i).getHall(); 
       rows[i][5] = list.get(i).getDescription(); 

       if(list.get(i).getImage() != null){ 

       ImageIcon image = new ImageIcon(new ImageIcon(list.get(i).getImage()).getImage() 
       .getScaledInstance(150, 120, Image.SCALE_SMOOTH)); 

       rows[i][6] = image; 
       } 
       else{ 
        rows[i][6] = null; 
       }  
      } 

      TheModel model = new TheModel(rows, columnName); 
      jTable1.setModel(model); 
      jTable1.setRowHeight(120); 
      jTable1.getColumnModel().getColumn(5).setPreferredWidth(150); 
     } 




     @SuppressWarnings("unchecked") 
     // <editor-fold defaultstate="collapsed" desc="Generated Code">       
     private void initComponents() { 
      ArrayList<Movie> list; 
      jScrollPane1 = new javax.swing.JScrollPane(); 
      jTable1 = new javax.swing.JTable(); 
      jLabel1 = new javax.swing.JLabel(); 
      back= new javax.swing.JButton(); 

      setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

      jTable1.setModel(new javax.swing.table.DefaultTableModel(
       new Object [][] { 
        {null, null, null, null}, 
        {null, null, null, null}, 
        {null, null, null, null}, 
        {null, null, null, null} 
       }, 
       new String [] { 
        "Title 1", "Title 2", "Title 3", "Title 4" 
       } 
      )); 

      jTable1.addMouseListener(new java.awt.event.MouseAdapter() { // row is clicked 
       public void mouseClicked(java.awt.event.MouseEvent evt) { 
        int selectedRowIndex = jTable1.getSelectedRow(); 
        int selectedColumnIndex = jTable1.getSelectedColumn(); 
        Object selectedObject = (Object) jTable1.getModel().getValueAt(selectedRowIndex, selectedColumnIndex); 
        System.out.println(selectedObject); 
       } 

      }); 
      jScrollPane1.setViewportView(jTable1); 

      javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); 
      getContentPane().setLayout(layout); 
      layout.setHorizontalGroup(
       layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() 
        .addContainerGap() 
        .addComponent(jScrollPane1) 
        .addContainerGap()) 
       .addGroup(layout.createSequentialGroup() 
        .addGap(228, 228, 228) 
        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 291, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addContainerGap(261, Short.MAX_VALUE)) 
      ); 
      layout.setVerticalGroup(
       layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
       .addGroup(layout.createSequentialGroup() 
        .addContainerGap() 
        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 272, javax.swing.GroupLayout.PREFERRED_SIZE) 
        .addGap(18, 18, 18) 
        .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE) 
        .addContainerGap())   
      ); 



      pack(); 
     }// </editor-fold>                


     public static void main(String args[]) { 
      try { 
       for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
        if ("Nimbus".equals(info.getName())) { 
         javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
         break; 
        } 
       } 
      } catch (ClassNotFoundException ex) { 
       java.util.logging.Logger.getLogger(viewMovie.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
      } catch (InstantiationException ex) { 
       java.util.logging.Logger.getLogger(viewMovie.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
      } catch (IllegalAccessException ex) { 
       java.util.logging.Logger.getLogger(viewMovie.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
      } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
       java.util.logging.Logger.getLogger(viewMovie.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
      } 

      java.awt.EventQueue.invokeLater(new Runnable() { 
       public void run() { 
        try { 
         new viewMovie().setVisible(true); 
        } catch (Exception e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
      }); 
     } 

     // Variables declaration - do not modify      
     private javax.swing.JLabel jLabel1; 
     private javax.swing.JScrollPane jScrollPane1; 
     private javax.swing.JTable jTable1; 
     private javax.swing.JButton back; 


     // End of variables declaration     
    } 

當我點擊一個細胞,它假設顯示所有行的值,但只顯示單元格的值。

+0

'Object selectedObject =(Object)jTable1.getModel()。getValueAt(selectedRowIndex,selectedColumnIndex); System.out.println(selectedObject);'建議我根本不打印行 – BoDidely

+0

@BoDidely什麼是正確的方法? –

+0

您正在選擇一個對象並進行打印。您需要爲該行中的每個對象執行 – BoDidely

回答

2

一種選擇是打印所選行的數據向量:

DefaultTableModel model = (DefaultTableModel)jTable1.getModel(); 
System.out.println(model.getDataVector().get(selectedRowIndex)); 

或者你可以陸續打印單排的單元格的值:

TableModel model = jTable1.getModel(); 
for(int i = 0; i < model.getColumnCount(); i++){ 
    if(i > 0){ 
     System.out.println(", "); 
    } 
    System.out.println(model.getValueAt(selectedRowIndex, selectedColumnIndex)); 
} 
System.out.println(); 
+0

對於第一個,我得到錯誤'TheModel無法轉換爲javax.swing.table.DefaultTableModel' –

1

不是一個答案(jhead的給你示例代碼),只是一個很長的評論。

當點擊一行,

一個適當的圖形用戶界面的設計應工作無論用戶使用鼠標或鍵盤來選擇一行。所以你應該使用ListSelectionListener。有關更多信息和示例,請參閱How to Write a ListSelectionListener的Swing教程部分。本教程使用JList,但對於JTable也是如此。

另外,如果選擇了多個行呢?

我希望它顯示所有選定的行值。

這是什麼意思?所有數據已經​​顯示在表格中。

+0

當行檢測到雙擊時,我希望它顯示另一個幀並傳遞所有的行值到框架 –

+0

@JohnJoe,那麼你應該在你的問題中說明。無論如何,你已經有了JHead的答案。該示例顯示如何使用DefaultTableModel的get getDataVector()方法獲取行Vector。 – camickr

+0

我使用JHead代碼,但得到'TheModel不能轉換爲javax.swing.table.DefaultTableModel' –