更改调整JTable标头光标的大小

时间:2015-10-17 04:33:25

标签: java header jtable cursor

所以我知道您可以使用以下内容更改jtable标题的光标:

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

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

- 的修改 -

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);
    }
});

1 个答案:

答案 0 :(得分: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)将无法工作。