我在GUI中有一个JTable
,我想根据用户点击的单元格的值返回一个数字。这是代码:
ListSelectionModel newmodel = mytable.getSelectionModel();
newmodel.addListSelectionListener(new ListSelectionListener() {
@Override
public void valueChanged(ListSelectionEvent e) {
int row = mytable.getSelectedRow();
int column = mytable.getSelectedColumn();
int cell = getNewNum();
datefield.setText(String.valueOf(cell));
}
});
我有几个问题。首先,这种方法使我的表格可编辑。在我使用此方法之前,我无法编辑表,但现在我可以删除条目。我查看了API,但我不知道为什么会这样。其次,如果我单击第3行中的单元格,然后单击单元格3中的另一行,则不会注册任何事件。如何通过单击当前所选行的单元格来创建事件?
答案 0 :(得分:7)
一种常见的方法是获取用户点击事件的位置:
jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseClicked(java.awt.event.MouseEvent evt) {
int row = jTable1.rowAtPoint(evt.getPoint());
int col = jTable1.columnAtPoint(evt.getPoint());
if (row >= 0 && col >= 0) {
......
}
}
});
以下是使用选择模式的第二个选项:
jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
@Override
public void mouseClicked(java.awt.event.MouseEvent evt) {
...
int row = jTable1.getSelectedRow();
int col = jTable1.getSelectedColumn());
if (evt.getClickCount() > 1) { // double-click etc...
...
如果你去:
public boolean isCellEditable(int row, int col) {
return false;
}
然后您的JTable将无法编辑。
最后,为了获得您想要的值,您只需要调用JTable模型的getValueAt(row,col)
,或者获取如下内容:
Object foo = jTable1.getModel().getValueAt(row, col);