2016-03-07 68 views
0

功能需要完成是:設置選取JTree的節點到的JTable

  1. 從子組(TEST NAME)
  2. 點擊>>按鈕,這意味着移動選擇主組
  3. 選擇選擇到JTable中
  4. 顯示slected(測試)與相應的價格上的JTable

條件:

  • 如果選定的節點(測試名稱)已被選中並添加到Jtable show消息中說:測試名稱已添加。
  • 我們可以選擇並加入衆多測試名稱

Demo image

impotant說JTree的數據來自兩個表的主族和子組

下面的代碼:>>的按鈕

try { 
     DefaultMutableTreeNode selectedElement = (DefaultMutableTreeNode) TestTree.getSelectionPath().getLastPathComponent(); 
     Object[] row = {selectedElement}; 
     DefaultTableModel model = (DefaultTableModel) myTests_table.getModel(); 
     System.out.println(String.valueOf(row).toString() + "Hi"); 
     if (selectedElement.isLeaf() == true) { 
      //model.addRow(row); 
      // retrive date from DB price 
      String sql = "SELECT sub_group.name AS 'name', sub_group.price AS 'price'" 
        + "FROM sub_group \n" 
        + "where sub_group.name = '" + row + "' "; 
      pst = conn.prepareStatement(sql); 
      rs = pst.executeQuery(sql); 
      while (rs.next()) { 
       myTests_table.setModel(DbUtils.resultSetToTableModel(rs)); 
      } 
     } else { 
      JOptionPane.showMessageDialog(null, "Please Choose Test name!", "Error", JOptionPane.WARNING_MESSAGE); 
     } 
    } catch (Exception e) { 
     JOptionPane.showMessageDialog(null, "Error"); 
    } 

Dears 哪裏出錯? 感謝

回答

-1

如果問題是,新的TableModel沒有反映在用戶界面中,使用tableModel.fireTableDataChanged()。

+0

感謝您的回覆 –

+1

「TableModelEvent」應該從TableModel本身的範圍內觸發_only_,而不是在外部。 – trashgod

+0

你能指出任何說這是最佳做法的來源嗎?還有其他問題有相同的答案,他們也這樣說。例如:http://stackoverflow.com/questions/3179136/jtable-how-to-refresh-table-model-after-insert-delete-or-update-the-data – shark

1

TreeSelectionListener加入您的JTree,如here所示。在聽衆中,更新JTableTableModel;當你的執行setValueAt()觸發RELEASE TableModelEvent時,監聽表會相應地更新自己。您的表格模型應延伸AbstractTableModel,如圖所示here,幷包含Set<Row>。您的班級應該持有nameprice。如果實現了Comparable<Row>,如引用的示例here所示,那麼當您調用add()時,Set<Row>將自動排除重複項。

+0

感謝您的回覆 –