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

标签 java swing events jtable listener

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

相关文章:

java - 递增运算符值(java)?

java - JavaFX 中的 SecondaryLoop,如 Swing?

java - JPanel 的背景图像有一些部分是透明的

events - Node.js 事件处理顺序

javascript - JQuery:如何在不同的元素和不同的 Action 上同时附加相同的委托(delegate)事件

java - 可以从 Java 或 JavaFx 使用 mongorestore 和 mongodump 命令吗?

java - 如何声明具有变量泛型的映射?

java - 如何获得任何一天的星期日

java - 如何在两个面板之间拖放形状

c# - 获得对 C# 组件中鼠标点击的访问权限