JTable.setAutoCreateRowSorter
создает TableRowSorter
, который работает очень хорошо *, за исключением одного: он запускает сортировку, даже если на MouseEvent
есть модификаторы. Я узнал об этом только после того, как добавил Роба TableColumnManager . Когда вы щелкнете мета (control + button1 в macOS) на JTableHeader
, вы увидите, что сортировка происходит непосредственно перед появлением всплывающего окна выбора столбца. Я не хочу, чтобы сортировка запускалась вообще, если есть какие-либо модификаторы.
Есть ли простой способ запустить огонь MouseAdapter
, только если MouseEvent
не имеет модификаторов (в частности, мета-модификатора)? Я не хочу помещать средство выбора столбцов в другое место в приложении, где это не будет так очевидно.
Ниже приведен мой пример MCV (извините, что не опубликовал класс Роба, см. Ссылку выше). Вы можете протестировать поведение модификатора мыши (то есть, доказать, что модификаторы строк игнорируют модификаторы), не обращаясь к TableColumnManager
.
import javax.swing.*;
public class SorterChooser {
private static void createAndShowGUI() {
JFrame frame = new JFrame("SorterChooser");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Object[][] data = { {"a", "1"}, {"b", "3"}, {"c", "2"}, {"d", "4"} };
String[] colnames = { "c1", "c2" };
JTable tab = new JTable(data, colnames);
JScrollPane sp = new JScrollPane(tab);
tab.setAutoCreateRowSorter(true);
new TableColumnManager(tab, true); // comment this out to demo mouse behavior
frame.getContentPane().add(sp);
frame.pack();
frame.setVisible(true);
}
public static void main (String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
- Хорошо, я имею в виду, что он обрабатывает изменения модели и многие другие вещи, которые мне нужны (например, некоторые столбцы не могут быть отсортированы).