我在JScrollPane
内有一个JTable
,它使用enabled(false)
禁用,但是我仍然想在转换时更改为手形光标。我试图简单地设置手动的表的光标:手形光标禁用JTable
table.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
我试图重写的JTable的getCursor()方法:
JTable table = new JTable(tableModel){
@Override
public Cursor getCursor() {
return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); //DOESNT WORK
}
};
然而技术都不能工作。我需要做的一种方法是在整个表中添加一个mouseMotionListener
,但是这个问题是,在实际的应用程序中,按下表中的一个按钮会导致显示一个'JOptionpane';如果用户继续将光标移出表格并关闭“JOptionPane”,则可能发生错误。当然,'MouseMotionListener'是过度的..?
我也研究覆盖JTable
(和随后的Component
)setEnabled
方法,但是我很努力地找出哪些代码可以防止显示手形光标。任何帮助将非常感激!下面的代码:
import java.awt.*;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class TableCursorTest {
public TableCursorTest(){
JFrame frame = new JFrame();
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
String[] headers = {"Items"};
Object[][] data = new Object[][]{{"item 1"},{"item 2"}};
DefaultTableModel tableModel = new DefaultTableModel(data, headers);
@SuppressWarnings("serial")
@Override
public Cursor getCursor() {
return Cursor.getPredefinedCursor(Cursor.HAND_CURSOR); //DOESNT WORK
}
};
JScrollPane scrollPane = new JScrollPane(table);
table.setEnabled(false);
table.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); //DOESNT WORK
constraints.gridx = 0;
constraints.gridy = 0;
constraints.weightx = 0;
constraints.weighty = 0;
panel.add(scrollPane, constraints);
frame.setContentPane(panel);
frame.setPreferredSize(new Dimension(500,500));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args){
new TableCursorTest();
}
}
UPDATE:对不起,问题是缺乏一些信息:该表不总是填充的ScrollPane因此设置滚动面板的手形光标引起手光标置于行的行其不存在。如果可能的话,手形光标应该只出现在表格的各行上。
嗨安德鲁,谢谢你的回应。 Scrollpane.setCursor确实会成功更改handCursor,但它会更改整个窗格的光标。我只想把手形光标放在jtable的行上,而这些行并不总是足够大以填满表格。 – Hungry 2014-11-06 10:54:12
*“我只想把手形光标放在jtable的行上。”*挑剔,挑剔。 ;) – 2014-11-06 10:55:07
对不起!我也试过'scrollPane.getViewport()。getComponent(0).setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));'但它没有任何影响。 – Hungry 2014-11-06 10:57:42