сортировка стрелок заголовка столбца jtable

#java #swing #sorting #jtable

#java #качать #сортировка #jtable

Вопрос:

Кто-нибудь знает, как реализовать стрелки вверх и вниз заголовка столбца JTable при сортировке его строк?

Я создал свой собственный способ сортировки, и он запускается путем прослушивания щелчков мыши с помощью mouseadapter, и единственное, что осталось, — это видимость таких стрелок в заголовке…

Есть ли также способ легко реализовать сортируемую jtable?


Я закончил выполнять всю сортировку, и последнее, что я не могу сделать, это показать стрелки сортировки..

я не хочу создавать новый, но мне не удалось найти, есть ли setEnableArrow или что-то в этом роде..

есть идеи по этому поводу?

Комментарии:

1. хорошо, чего я просто хочу сейчас, так это реализации стрелок…

Ответ №1:

Вы можете взглянуть на исходный код DefaultTableCellHeaderRenderer . В getTableCellRendererComponent вы видите, откуда извлекаются эти значки (например UIManager.getIcon("Table.ascendingSortIcon") ) и как устанавливается этот значок ( setIcon(sortIcon); )

Комментарии:

1. @Steve обычно исходный код включается, если вы загружаете официальный JDK. Или просто быстрый поиск в Google, и вы можете использовать этот сайт вместо

Ответ №2:

Я предлагаю вам не путаться с DefaultTableCellHeaderRenderer . Проблема с этим заключается в том, что это просто значение по умолчанию. Предполагается, что каждый LaF создает подкласс этого и выполняет там свой собственный рендеринг. Я предлагаю использовать LaF, который предоставляет эту функциональность из коробки. Я думаю, что TinyLaf может это сделать, но я не уверен. Вы можете создать подкласс DefaultTableCellHeaderRenderer , но вы рискуете отделить отображение заголовка от остальной части LaF.

Итак, как это сделать? Юникод на помощь! Обратитесь к странице геометрические фигуры и используйте то, что вам нравится. Я выбрал треугольники 'u25B2' и 'u25BC' . Но тогда мне пришлось скрыть страшный значок Swing:

 UIManager.put( "Table.ascendingSortIcon", new EmptyIcon() );
UIManager.put( "Table.descendingSortIcon", new EmptyIcon() );
  

Будьте очень осторожны с приведенными выше строками! Они заменят значки для всех JTables в вашем приложении, которые могут быть не такими, как вы хотите. Тогда вы должны быть в состоянии увидеть что-то вроде этого:

Значок сортировки в Юникоде

Пустой значок может быть похож:

 class EmptyIcon implements Icon, Serializable {
    int width = 0;
    int height = 0;
    public void paintIcon(Component c, Graphics g, int x, int y) {}
    public int getIconWidth() { return width; }
    public int getIconHeight() { return height; }
}
  

Ответ №3:

Это самый простой способ реализовать сортировку:

     MyModel model = new MyModel();
    TableRowSorter<MyModel> sorter = new TableRowSorter<MyModel> (model);
    jTable1 = new javax.swing.JTable();
    jTable1.setRowSorter(sorter);
    jTable1.setModel(model);
  

Ответ №4:

Что, если использовать JXTable вместо Jtable?

в заголовке этих таблиц есть стрелки для их сортировки, и они просты в использовании … стоит попробовать…