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