所以我知道您可以使用以下命令更改 jtable 标题的光标:
jTable.getTableHeader().setCursor(MyClient.greenResizeHorizontal);
如何更改列标题之间的水平调整大小光标?
--编辑--
根据@MadProgrammer,我尝试使用 UI delegate 来搞乱,并且能够以与上面相同的方式更改光标。仍然不知道如何更改调整大小部分。有人有什么想法吗?
jtable.getTableHeader().setUI(new BasicTableHeaderUI(){
JTableHeader header;
public void installUI(JComponent c) {
header = (JTableHeader) c;
header.setCursor(MyClient.greenResizeHorizontal);
super.installUI(c);
}
});
最佳答案
不幸的是,没有“好的”方法来修改这个光标。
BasicTableHeaderUI
使用默认的调整大小光标,并且它包含名为 "resizeCursor"
的私有(private)静态字段。
此外,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,并且 - 因为它使用私有(private)内容 - 它可能会停止与任何 Java 更新一起使用,并且 - AFAIR - 如果您的应用程序的 jar 已签名( https://docs.oracle.com/javase/tutorial/deployment/jar/signing.html ),则它将无法工作。
关于java - 更改调整 JTable 标题光标的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33182773/