24

データとしてJTable がありJLabel[][]ます。ここで、JLabel またはテーブル セル (ただし、列の 1 つだけ) のダブルクリックを検出したいと考えています。JLabelそれぞれのテーブルセルにAction/MouseListenerを追加するにはどうすればよいですか?

4

2 に答える 2

67

どうですか:

table.addMouseListener(new MouseAdapter() {
  public void mouseClicked(MouseEvent e) {
    if (e.getClickCount() == 2) {
      JTable target = (JTable)e.getSource();
      int row = target.getSelectedRow();
      int column = target.getSelectedColumn();
      // do some action if appropriate column
    }
  }
});
于 2009-09-04T09:16:52.923 に答える
27

以下を除いて、基本的にはすでに受け入れられているものと同じ提案です。

a) mouseClicked ではなく、mousePressed を処理する必要があります。mouseClicked イベントは、mousePressed イベントと mouseReleased イベントが同じピクセル位置で生成された場合にのみ発生します。ユーザーがダブルクリック中にマウスを 1 ピクセルでも移動すると、期待されるダブルクリックが得られません。

b) また、クリックされたセルを取得するために columnAtPoint() および rowAtPoint() メソッドの使用を検討することもできます。この場合はおそらく違いはありませんが、選択が変更されないため、マウスの右クリックに MouseListener を使用しようとする場合は問題になります。したがって、この方法を使用する習慣を身につければ、将来問題が発生することはありません.

于 2009-09-04T23:26:05.140 に答える