【问题标题】:Java - Mouse event does not work in JTableJava - 鼠标事件在 JTable 中不起作用
【发布时间】:2014-10-23 01:08:22
【问题描述】:

我在尝试对我的 JTable 工作进行单击行事件时遇到问题。我已将事件添加到我的 JTable,但是当我运行我的程序并单击该行时,它不显示该消息。

这是我的代码:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.sql.SQLException;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;

public class listContacts extends JFrame {

public listContacts(){

    setLayout(new FlowLayout());

    String[] columnNames = {"GSD Number", "Scheduled Time"};
    Object [][] dataTable = {};

    DefaultTableModel listTableModel;
    listTableModel = new DefaultTableModel(dataTable, columnNames) {

        //Prevent user from editing the cells
        public boolean isCellEditable(int rowIndex, int mCollIndex){
            return false;
        }
    };

    int cont = 1;

    while(cont < 10){
        listTableModel.addRow(new Object[] {cont, cont + cont} );
        cont++;
    }


    JTable listTable = new JTable(listTableModel);

  //This is the code that adds the event to the JTable
    listTable.addMouseListener(new MouseAdapter() {

        public void rowClicked(MouseEvent e){
            JOptionPane.showMessageDialog(null,"You've clicked on this row");
        }

    });

    listTable.setCellEditor(null);

    JScrollPane pane = new JScrollPane(listTable);
    add(pane);
}


public static void main(String[] args) {
    listContacts tester = new listContacts();
    tester.setVisible(true);
    tester.setDefaultCloseOperation(EXIT_ON_CLOSE);
    tester.setSize(800, 200);
    tester.setTitle("Just a test");
}

}

有人可以帮忙吗?提前致谢!

【问题讨论】:

    标签: java swing jtable mouseevent defaulttablemodel


    【解决方案1】:

    试试这个...

    listTable.addMouseListener(new MouseAdapter() {
    
        // Add this annotation to your method
        @Override
        public void rowClicked(MouseEvent e){
            JOptionPane.showMessageDialog(null,"You've clicked on this row");
        }
    
    });
    

    现在编译它...看看它是如何失败的...

    rowClicked 不是MouseAdapter 继承自的任何接口或类的方法,因此,没有任何东西可以调用它,因为什么都不知道......它不在鼠标事件通知的合同要求范围内。

    查看How to Write a Mouse Listenerjava.awt.MouseListener 了解更多详情

    【讨论】:

      【解决方案2】:

      感谢 MadProgrammer,我听从了您的建议,并将方法的名称更改为 mouseClicked 并且事件有效。这是我的代码:

      listTable.addMouseListener(new MouseAdapter() {
      
              // Add this annotation to your method
              @Override
              public void mouseClicked(MouseEvent e){
                  JOptionPane.showMessageDialog(null,"You've clicked on this row");
              }
      
          });
      

      再次感谢您的帮助!

      【讨论】:

        猜你喜欢
        • 2021-02-12
        • 2011-02-02
        • 2013-11-07
        • 1970-01-01
        • 2014-12-14
        • 2015-06-23
        • 2014-03-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多