【问题标题】:JTable listener problemJTable 监听器问题
【发布时间】:2011-02-25 12:11:52
【问题描述】:

我在 jtable 中添加了一个鼠标单击的列表器,当我双击该行时,会相应地弹出一个窗口。

jTable.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
double amount = Double.parseDouble(jTable.getValueAt(getSelectedRow(), 4).toString());
String remarks = jTable.getValueAt(getSelectedRow(), 3).toString();
String transactionID = jTable.getValueAt(getSelectedRow(), 1).toString();
        new EditFrame(...)
}
});

这段代码我用来检索行选择的行。

public int getSelectedRow() {
jTable.getSelectionModel().addListSelectionListener(
new ListSelectionListener() {
 public void valueChanged(ListSelectionEvent event) {
  int viewRow = jTable.getSelectedRow();
  selectedRow = viewRow;
  System.out.println(viewRow);
 }
});
return selectedRow;
}

就我而言,我意识到当我第一次单击第二行时,selectedRow 为空,只有当我选择第一行然后第二行时,我才能获得正确的数据。如果我删除了鼠标侦听器,问题就会得到解决。是因为我在鼠标点击监听器上做错了吗?

【问题讨论】:

    标签: java swing mouse jtable listener


    【解决方案1】:

    你做错了。完全删除您当前的 getSelectedRow() 方法,并且永远不要尝试编写类似的代码。这是一个更好的版本:

    jTable.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(java.awt.event.MouseEvent e) {
    int selectedRow = jTable.getSelectedRow();
    double amount = Double.parseDouble(jTable.getValueAt(selectedRow, 4).toString());
    String remarks = jTable.getValueAt(selectedRow, 3).toString();
    String transactionID = jTable.getValueAt(selectedRow, 1).toString();
            new EditFrame(...)
    }
    });
    

    【讨论】:

      【解决方案2】:

      如果您只想知道点击了哪一行,则不需要选择侦听器。只需使用:

      table.rowAtPoint();
      

      【讨论】:

        猜你喜欢
        • 2013-04-01
        • 2012-03-16
        • 1970-01-01
        • 2013-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-26
        • 2011-08-16
        相关资源
        最近更新 更多