我在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