2011-10-11 107 views
1

我在一个特定的列上创建了一个表和setcursor。在显示表格时,光标第一次正确显示,但如果表格模型更改并且表格被重新绘制,则根据代码不显示光标,而是在所有列上显示默认光标。JTable.SetCursor不改变光标

试过调试代码,调用jtable.setcursor得到正确执行,但光标不显示在屏幕上。

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

任何帮助表示赞赏。


我最近的观察:

我已经发现,当任何其他对话过来,显示表滚动面板的问题就出现了。如果JFileChooser或JDialog通过包含JScrollPane for JTable的面板启动,则在关闭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); 
     } 
    } 
}); 
+0

你能向我们展示'setCursor'到特定'TableColumn'的代码吗 – mKorbel

+0

工作区 - 请展示一个短的可运行示例(又名:sscce),它演示了 – kleopatra

+0

刚刚注意到你的转换 - 这可能不是你想要的:由columnAtPoint返回的列_is view_ coordinate,或者按原样或convertToModel – kleopatra

回答

1
Have set cursor through MouseMotionListener inside MouseMoved() method. 

不,我认为没有任何理由为

可以解决

1)定义CursorJScrollPane#setCursor(),如果你需要从它的Model

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

3)例如用于JTableCursorhere

1

我没有JFileChooser中/的JDialog的所有者设为基础面板。因此,当这些组件结束时,创建了一个新的层次结构,所有的绘画操作都在这个新的层次结构上开始(类似这样的,但我不太确定)。

当我将次要面板的所有者设置为主面板时,在处理这些次要面板时,修改后的光标再次开始出现在主面板上(可能是因为现在只有一次涂料租用事实)。

+0

现在我明白你的意思了,但是设置所有者并没有什么区别:只要filechooser处于打开状态,自定义光标就不会显示,但只要关闭它就会重新显示。是不是原生的行为(至少在赢):f.i.打开此页面上的保存对话框,然后将鼠标移动到链接上不会更改光标 – kleopatra