Java JTable.SetCursor不更改光标

Java JTable.SetCursor不更改光标,java,swing,jtable,Java,Swing,Jtable,我已经创建了一个表,并在特定列上设置了游标。第一次显示表格时,光标会正确显示,但如果表格模型发生更改,并且表格重新绘制,则光标不会按照代码显示,而是在所有列上显示默认光标 尝试调试代码时,对jtable.setcursor的调用得到正确执行,但光标未显示在屏幕上 已通过MouseMoved()方法中的MouseMotionListener设置光标 谢谢你的帮助 我最近的观察: 我检测到,当任何其他对话框出现在显示该表的滚动窗格上时,问题就会出现。如果在包含JScrollPane for JTa

我已经创建了一个表,并在特定列上设置了游标。第一次显示表格时,光标会正确显示,但如果表格模型发生更改,并且表格重新绘制,则光标不会按照代码显示,而是在所有列上显示默认光标

尝试调试代码时,对jtable.setcursor的调用得到正确执行,但光标未显示在屏幕上

已通过MouseMoved()方法中的MouseMotionListener设置光标

谢谢你的帮助


我最近的观察:

我检测到,当任何其他对话框出现在显示该表的滚动窗格上时,问题就会出现。如果在包含JScrollPane for JTable的面板上启动JFileChooser或JDialog,则在关闭JFileChooser或JDialog后,表上的光标不会按照代码显示,即使在表模型完全不变的情况下也会发生这种情况

下面是我设置光标的代码:

final Cursor handCursor = Cursor.getPredefinedCursor(Cursor.HAND_CURSOR);
final Cursor defaultCursor = Cursor.getDefaultCursor();
table.addMouseMotionListener(new MouseAdapter() 
{
    public void mouseMoved(MouseEvent e) 
    {
        int cModel = table.columnAtPoint(e.getPoint());
        int cView = table.convertColumnIndexToView(cModel);
        if (cView == 1)
        {
            table.setCursor(handCursor);                             
        }
        else
        {
            table.setCursor(defaultCursor);
        }
    }
});

可能是当模型更改时,列模型也会更改,并且旧的列实例不再有效

Have set cursor through MouseMotionListener inside MouseMoved() method.
不,我想这是有原因的

你可以解决这个问题

1) 如果需要从其
模型重新创建
JTable
,请为
JScrollPane#setCursor()
定义
光标

2) 停止在代码中重新创建
JTable
(从
TableModel


3) 例如,对于
JTable
Cursor

,我没有将JFileChooser/Jdialog的所有者设置为底层面板。因此,当这些组件过来时,创建了一个新的层次结构,所有的绘制操作都在这个新的层次结构上开始(类似于这样,但我不太确定)


当我将次面板的所有者设置为主面板时,在处理这些次面板时,修改后的光标再次出现在主面板上(可能是因为现在有一个油漆工).

您能否向我们展示
setCursor
到特定
TableColumn
工作表单的代码-请展示一个简短的可运行示例(aka:sscce),演示刚才注意到的转换问题-这可能不是您想要的:columnAtPoint返回的列是视图坐标,现在我明白你的意思了,但设置所有者与否并没有什么区别:只要文件选择器打开,自定义光标就不会显示,但一旦关闭,它就会重新显示。这不是本地行为吗(至少在win上):f.i.打开此页面上的“保存”对话框,然后将鼠标移到链接上不会更改光标