2016-06-22 7 views
2

たListSelectionEvent火災2は、行/列たListSelectionEvent火災2は、行/列をクリックすると

をクリックしたときに私は私のコードを任意のものに変更する必要があり、非同期トリガ非同期トリガ?

import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.ListSelectionModel; 
import javax.swing.event.ListSelectionEvent; 
import javax.swing.event.ListSelectionListener; 

public class JTableListSelectionListener { 

public static void main(String[] a) { 
JFrame frame = new JFrame(); 
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

final JTable table; 

String[] columnTitles = { "A", "B", "C", "D" }; 
Object[][] rowData = { { "11", "12", "13", "14" }, { "21", "22", "23", "24" }, 
    { "31", "32", "33", "34" }, { "41", "42", "44", "44" } }; 

table = new JTable(rowData, columnTitles); 

table.setCellSelectionEnabled(true); 
ListSelectionModel cellSelectionModel = table.getSelectionModel(); 
cellSelectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 

cellSelectionModel.addListSelectionListener(new ListSelectionListener() { 
    public void valueChanged(ListSelectionEvent e) { 
    String selectedData = null; 

    int[] selectedRow = table.getSelectedRows(); 
    int[] selectedColumns = table.getSelectedColumns(); 

    for (int i = 0; i < selectedRow.length; i++) { 
     for (int j = 0; j < selectedColumns.length; j++) { 
     selectedData = (String) table.getValueAt(selectedRow[i], selectedColumns[j]); 
     } 
    } 
    System.out.println("Selected: " + selectedData); 
    } 

}); 

frame.add(new JScrollPane(table)); 

frame.setSize(300, 200); 
frame.setVisible(true); 
} 

} 

出力は

選択されています:42

は、選択された:42

が選択さ:33

が選択さ:33

をしかし、私はいつでも、単一のイベントをトリガしたいですユーザーは特定の行または列をクリックしますか?

答えて

4

ListSelectionEvent.getValueIsAdjusting()を使用してチェックしてください(変更中)。これは内の1つの変更がまだ行われている複数のイベントのシリーズであるかどうかを

返します。これの使用方法の詳細については、ListSelectionModel.setValueIsAdjusting(boolean)のドキュメントを参照してください。アンドリュー・トンプソンによって提案と更新されたコードがなるよう

2

追加getValueIsAdjusting()

cellSelectionModel.addListSelectionListener(new ListSelectionListener() { 
    public void valueChanged(ListSelectionEvent e) { 

    if(e.getValueIsAdjusting()) { 
     return; 
    } 
    .. 
関連する問題