您当然可以将相同的内容添加MouseListener
到多个组件中 - 这是一个最简单形式的示例:
MouseListener ml = new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {System.out.println("Released!");}
@Override
public void mousePressed(MouseEvent e) {System.out.println("Pressed!");}
@Override
public void mouseExited(MouseEvent e) {System.out.println("Exited!");}
@Override
public void mouseEntered(MouseEvent e) {System.out.println("Entered!");}
@Override
public void mouseClicked(MouseEvent e) {System.out.println("Clicked!");}
};
JLabel j1 = new JLabel("Label1");
j1.addMouseListener(ml);
JLabel j2 = new JLabel("Label2");
j2.addMouseListener(ml);
但是根据您的代码,您正在弄乱 JTable - JTable 的行为与您的想法不同。您尝试编辑的标签实际上是 TableCellEditor 的一部分。JTable 使用单个 TableCellEditor(读取:单个 JLabel)来显示 JTable 中的每个单元格。这就是为什么您只看到监听器应用于最后一个单元格(因为那是唯一一个最后一个单元格不再具有完整组件的原因 - 其余的只是之前应用该组件的位置的幽灵)。
好消息是您可以在 中添加一个MouseListener
,JTable
并从那里获取信息:
final JTable table = new JTable();
MouseListener ml = new MouseListener() {
@Override
public void mouseReleased(MouseEvent e) {
System.out.println(table.getModel().getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println(table.getModel().getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println(table.getModel().getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println(table.getModel().getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println(table.getModel().getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
}
};
table.addMouseListener(ml);