Swing/DoubleClick のバックアップの現在との差分(No.13)
TITLE:JTableのセルをダブルクリック
JTableのセルをダブルクリック
編集者:Terai Atsuhiro~
作成日:2004-06-28
更新日:2023-07-11 (火) 09:56:08
概要
JTable
のセルをダブルクリックして内容を表示します。
Screenshot
Advertisement
概要
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
解説
-
JTable
にMouseListener
を設定して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;
コメント
- 行以外の場所をダブルクリックすると
IndexOutOfBoundsException
が発生する不具合を修正。 -- aterai