TITLE:JTableのセルをダブルクリック

JTableのセルをダブルクリック

編集者:Terai Atsuhiro~

作成日:2004-06-28
更新日:2023-07-11 (火) 09:56:08
  • category: swing folder: DoubleClick title: JTableのセルをダブルクリック tags: [JTable, MouseListener] author: aterai pubdate: 2004-06-28T05:48:37+09:00 description: JTableのセルをダブルクリックして内容を表示します。 image: https://lh6.googleusercontent.com/_9Z4BYR88imo/TQTLv3qaXoI/AAAAAAAAAYE/aAnkonlteYo/s800/DoubleClick.png

概要

JTableのセルをダブルクリックして内容を表示します。

概要

JTableのセルをダブルクリックして内容を表示します。

サンプルコード

#spanend
#spanadd
table.setAutoCreateRowSorter(true);
#spanend
#spanadd
table.addMouseListener(new MouseAdapter() {
#spanend
  @Override public void mouseClicked(MouseEvent e) {
    if (e.getClickCount() >= 2) {
      Point pt = e.getPoint();
      int idx = table.rowAtPoint(pt);
      if (idx >= 0) {
        int row = table.convertRowIndexToModel(idx);
        String str = String.format(
          "%s (%s)", model.getValueAt(row, 1), model.getValueAt(row, 2));
        JOptionPane.showMessageDialog(
          table, str, "title", JOptionPane.INFORMATION_MESSAGE);
      }
    }
  }
#spanadd
});
#spanend
#spanadd
View in GitHub: Java, Kotlin

#screenshot

解説

  • JTableMouseListenerを設定してMouseEvent#getClickCount()メソッドでマウスクリック数を取得し、これが2以上になる場合はセルがダブルクリックされたと判断
  • JTableのセルはダブルクリックで編集開始がデフォルトなのですべてのセルを編集不可に設定

サンプルコード

#spanend
 table.addMouseListener(new MouseInputAdapter() {
   public void mouseClicked(MouseEvent me) {
     int col = table.columnAtPoint(me.getPoint());
     if(col==0 && me.getClickCount()==2) {
       showInfo(me);
       table.repaint();
     }else{
       super.mouseClicked(me);
     }
   }
 });
#spanadd
* 参考リンク [#reference]
#spanend
- [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/event/MouseEvent.html#getClickCount-- MouseEvent#getClickCount() (Java Platform SE 8)]

 private void showInfo(final MouseEvent me) {
   SwingUtilities.invokeLater(new Runnable() {
     public void run() {
       int row = sorter.modelIndex(table.rowAtPoint(me.getPoint()));
       String str = model.getValueAt(row, 1)+"("+model.getValueAt(row, 2)+")";
       JOptionPane.showMessageDialog(MainPanel.this, str, "タイトルバー",
                                     JOptionPane.INFORMATION_MESSAGE);
     }
   });
 }
#spandel
  • &jnlp;
  • &jar;
  • &zip;

コメント