我在 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 中的另一行,则不会注册任何事件。如何通过单击当前选定行上的单元格来创建事件?
最佳答案
常用的方法是通过事件获取用户点击的点:
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);
关于java - 如何确定 JTable 中的哪个单元格被选中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5044222/