JTable.SetCursor不更改游标

时间:2011-10-11 03:58:59

标签: java swing jtable

我在特定列上创建了一个表和setcursor。当显示表时,光标首次正确显示,但如果表模型更改并且表重新绘制,则光标不会按照代码显示,而是在所有列上显示默认光标。

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

在MouseMoved()方法中通过MouseMotionListener设置光标。

任何帮助表示感谢。


我最近的观察:

我检测到当显示表格的滚动窗格上出现任何其他对话框时会出现问题。如果在包含JScrollPane for JTable的面板上启动JFileChooser或JDialog,则在关闭JFileChooser或JDialog之后,表中的游标不会按代码显示,即使表模型根本没有更改,也会发生这种情况。 / p>

以下是我设置游标的代码:

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

3 个答案:

答案 0 :(得分:1)

可能是模型更改列模型也被更改,旧列实例不再有效。

答案 1 :(得分:1)

Have set cursor through MouseMotionListener inside MouseMoved() method.

不,我认为有任何理由

你可以解决这个问题

1)如果您需要从Cursor

重新创建JScrollPane#setCursor(),请为JTable定义Model

2)停止在代码中重新创建JTable(来自TableModel),

3)JTableCursor here

的示例

答案 2 :(得分:1)

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

当我将辅助面板的所有者设置为主面板时,在处理这些辅助面板时,修改后的光标再次开始出现在主面板上(可能是由于现在存在单个涂料租用事实)。 / p>