更改 Resize JTable Header 游标
Change Resize JTable Header Cursor
所以我知道您可以使用以下命令更改 jtable 的 header 的光标:
jTable.getTableHeader().setCursor(MyClient.greenResizeHorizontal);
如何更改第 header 列之间的水平大小调整光标?
--编辑--
Per @MadProgrammer 我试图弄乱 UI 委托,并且能够以与上述相同的方式更改光标。仍然不知道如何更改调整大小部分。有人有想法吗?
jtable.getTableHeader().setUI(new BasicTableHeaderUI(){
JTableHeader header;
public void installUI(JComponent c) {
header = (JTableHeader) c;
header.setCursor(MyClient.greenResizeHorizontal);
super.installUI(c);
}
});
不幸的是,没有 "good" 修改此游标的方法。
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);
}
});
但这是 hacky,并且 - 因为它使用 privat 东西 - 它可能会停止使用任何 Java 更新,并且 - AFAIR - 如果你的应用程序的 jar 已签名(https://docs.oracle.com/javase/tutorial/deployment/jar/signing.html).
所以我知道您可以使用以下命令更改 jtable 的 header 的光标:
jTable.getTableHeader().setCursor(MyClient.greenResizeHorizontal);
如何更改第 header 列之间的水平大小调整光标?
--编辑--
Per @MadProgrammer 我试图弄乱 UI 委托,并且能够以与上述相同的方式更改光标。仍然不知道如何更改调整大小部分。有人有想法吗?
jtable.getTableHeader().setUI(new BasicTableHeaderUI(){
JTableHeader header;
public void installUI(JComponent c) {
header = (JTableHeader) c;
header.setCursor(MyClient.greenResizeHorizontal);
super.installUI(c);
}
});
不幸的是,没有 "good" 修改此游标的方法。
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);
}
});
但这是 hacky,并且 - 因为它使用 privat 东西 - 它可能会停止使用任何 Java 更新,并且 - AFAIR - 如果你的应用程序的 jar 已签名(https://docs.oracle.com/javase/tutorial/deployment/jar/signing.html).