如何确定JTable中的哪个单元格被选中?

5 java events swing jtable listener

我有一个JTableGUI,我想根据用户点击的单元格的值返回一个数字.这是代码:

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中的另一行,则不会注册任何事件.如何通过单击当前所选行的单元格来创建事件?

Cos*_*lis 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) {
            ......

        }
    }
});
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)