java - 更改调整 JTable 标题光标的大小

标签 java header jtable cursor

所以我知道您可以使用以下命令更改 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/

相关文章:

css - Wordpress 子主题样式

html - 如何将元素左对齐(标题)

java - 将 Python 字典迁移到 Java 和 JSON

java - 如何使用正则表达式来匹配 b1、b2、... 到 b15 等表达式,但仅此而已?

C++ HW - 定义类 - 头文件中有其他类问题对象的对象(超出范围?),(也重新定义运算符,读入读出)

java - 从 JSON 对象填充 JTable

java.lang.ArrayIndexOutOfBoundsException : 0 >= 0 attempting to populate JTable 异常

java - 当用户成功使用Google登录时,如何在FirebaseDatabase中获取用户信息?

java - 将 Streaming Flux 的 WebClient Post 拆分为 JSON 数组

java - 需要有关 JTable 的帮助吗?