web-dev-qa-db-ja.com

JLabelまたはJTableセルのActionListener

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

22
stefita

どうですか:

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
    }
  }
});
62
Vinay Sajip

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

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

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

27
camickr