#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?
в заголовке этих таблиц есть стрелки для их сортировки, и они просты в использовании … стоит попробовать…