5 java events swing jtable listener
我有一个JTable
GUI,我想根据用户点击的单元格的值返回一个数字.这是代码:
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));
}
});
Run Code Online (Sandbox Code Playgroud)
我有几个问题.首先,这种方法使我的表格可编辑.在我使用此方法之前,我无法编辑表,但现在我可以删除条目.我查看了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) {
......
}
}
});
Run Code Online (Sandbox Code Playgroud)
以下是使用选择模式的第二个选项:
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...
...
Run Code Online (Sandbox Code Playgroud)
如果你走的话:
public boolean isCellEditable(int row, int col) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
然后您的JTable将无法编辑.
最后,为了获得您想要的值,您只需要调用getValueAt(row,col)
JTable模型,或者获取如下内容:
Object foo = jTable1.getModel().getValueAt(row, col);
Run Code Online (Sandbox Code Playgroud)