2016-06-22 3 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(), чтобы проверить его отсутствие (изменение).

Возвращает ли это или нет один в ряд нескольких событий,, где все еще сделаны изменения. Дополнительную информацию о том, как это используется, см. В документации для ListSelectionModel.setValueIsAdjusting(boolean).

2

Добавлено getValueIsAdjusting(), как предложил Эндрю Томпсон и обновленный код будет

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

    if(e.getValueIsAdjusting()) { 
     return; 
    } 
    ..