Изменить курсор размера заголовка JTable
Так что я знаю, что вы можете изменить курсор для заголовка jtable следующим образом:
jTable.getTableHeader().setCursor(MyClient.greenResizeHorizontal);
Как вы можете изменить горизонтальный курсор изменения размера между заголовками столбцов?
-РЕДАКТИРОВАТЬ-
За @MadProgrammer я пытался возиться с делегатом пользовательского интерфейса и смог изменить курсор так же, как и выше. До сих пор не знаю, как изменить часть изменения размера. Мысли кто-нибудь?
jtable.getTableHeader().setUI(new BasicTableHeaderUI(){
JTableHeader header;
public void installUI(JComponent c) {
header = (JTableHeader) c;
header.setCursor(MyClient.greenResizeHorizontal);
super.installUI(c);
}
});
1 ответ
К сожалению, нет "хорошего" способа изменить этот курсор.BasicTableHeaderUI
использует курсор изменения размера по умолчанию и содержит закрытое статическое поле с именем "resizeCursor"
для этого. Также Swing UIManager
не предоставляет никаких свойств, которые позволили бы изменить курсор (см. http://thebadprogrammer.com/swing-uimanager-keys/).
Единственный способ, который я нашел, - изменить значение этого поля с помощью отражения (я использую курсор в виде руки, любой другой может быть здесь):
table.getTableHeader().setUI(new BasicTableHeaderUI(){
public void installUI(JComponent c) {
try {
final Field f = getClass().getSuperclass().getDeclaredField("resizeCursor");
f.setAccessible(true);
f.set(null, Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
} catch (ReflectiveOperationException | SecurityException | IllegalArgumentException e) {
e.printStackTrace();
}
super.installUI(c);
}
});
Но это глупо, и - поскольку он использует приватные вещи - он может перестать работать с любым обновлением Java, и - AFAIR - не будет работать, если jar с вашим приложением подписан ( https://docs.oracle.com/javase/tutorial/deployment/jar/signing.html).