2017-05-03 6 views
1

2つのテーブルがあり、そのレコードをクリックすると、あるテーブルのレコードから別のテーブルにデータを追加しようとしています。fireTableDataChangedを使用してテーブルデータを更新する

現在、テーブルをクリックすると、値がclickedDataに追加されますが、このデータはテーブル内で更新されません。モデルのdataVectorの内容を変更しないmodel2を作成するために使用されるclickedData配列を更新し、内部convertToVector()を使用しています

import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 
import java.awt.*; 
import java.util.*; 

class TableTest extends JPanel { 
    JTable tbl1, tbl2; 
    GridBagConstraints gc = new GridBagConstraints(); 

    public TableTest(){ 
     this.setLayout(new GridBagLayout()); 
     gc.insets = new Insets(10, 10, 10, 30); 
     Object[][] data = new Object[100][2]; 
     Object[][] clickedData = new Object[100][2]; 
     String[] columnNames = {"X", "Y"}; 

     //Initialise tables 
     tbl1 = new JTable(data,columnNames); 
     DefaultTableModel model = new DefaultTableModel(data, columnNames); 

     DefaultTableModel myModel = new DefaultTableModel(data,columnNames){ 
      public boolean isCellEditable(int row, int column){ 
       return false; 
      } 
     }; 
     tbl1.setModel(myModel); 

     DefaultTableModel model2 = new DefaultTableModel(clickedData,columnNames); 
     tbl2 = new JTable(model2); 

     DefaultTableModel myModel2 = new DefaultTableModel(clickedData,columnNames){ 

      public boolean isCellEditable(int row, int column){ 
       return false; 
      } 
     }; 

     //Update Table Data 
     tbl1.addMouseListener(new java.awt.event.MouseAdapter(){ 
      public void mouseClicked(java.awt.event.MouseEvent evt){ 
       int row = tbl1.rowAtPoint(evt.getPoint()); 
       int col = tbl1.columnAtPoint(evt.getPoint()); 
       //basket[0] = row; 
       clickedData[0][0] = tbl1.getValueAt(row,col); 
       clickedData[0][1] = tbl1.getValueAt(row,col+1); 

       //use fireTableDatachanged 
       model2.fireTableDataChanged(); 

      } 
     }); 

     initLayout(0,0,tbl1); 
     initLayout(3,0,tbl2); 
    } 

    public void initLayout(int xlayout, int ylayout, JComponent component){ 
     gc.gridx = xlayout; 
     gc.gridy = ylayout; 
     this.add(component,gc); 
    } 
    } 

答えて

1

DefaultTableModelので:

は、ここに私のコードです。その結果、fireTableDataChanged()はリッスンJTableを通知しますが、モデルはその間に変更されていません。代わりに、setValueAt()からmodel2を更新してください。正しいイベントが発生します。同様の問題が検査されますhere

MouseListenerの代わりにListSelectionListenerを使用することも検討してください。

+1

ありがとう、これで問題は解決しました –

関連する問題