同じものを複数のコンポーネントに追加することもできます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);