因此,我知道您可以使用以下方法更改jtable标头的光标:

jTable.getTableHeader().setCursor(MyClient.greenResizeHorizontal);


如何更改列标题之间的水平调整大小光标?

- 编辑 -

对于每个@MadProgrammer,我尝试弄乱UI委托,并且能够像上面一样更改光标。仍然不知道如何更改调整大小的部分。有人在想吗?

jtable.getTableHeader().setUI(new BasicTableHeaderUI(){
    JTableHeader header;

    public void installUI(JComponent c) {
        header = (JTableHeader) c;
        header.setCursor(MyClient.greenResizeHorizontal);

        super.installUI(c);
    }
});

最佳答案

不幸的是,没有修改该光标的“好方法”。
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);
    }
});


但这是很棘手的,而且-因为它使用的是privat程序-它可能会停止与任何Java更新一起使用,并且-AFAIR-如果对应用程序的jar进行了签名(https://docs.oracle.com/javase/tutorial/deployment/jar/signing.html),则将不起作用。

10-07 13:08
查看更多