Swing/ButtonInTableHeader のバックアップソース(No.3)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/ButtonInTableHeader へ行く。
- 1 (2011-11-07 (月) 22:14:09)
- 2 (2012-12-15 (土) 04:36:51)
- 3 (2013-05-26 (日) 04:58:34)
- 4 (2013-08-17 (土) 15:43:15)
- 5 (2014-11-27 (木) 17:52:12)
- 6 (2015-02-26 (木) 13:58:46)
- 7 (2016-11-30 (水) 18:19:13)
- 8 (2017-11-22 (水) 15:31:15)
- 9 (2018-02-24 (土) 19:51:30)
- 10 (2019-07-05 (金) 14:31:17)
- 11 (2021-03-18 (木) 01:05:58)
TITLE:JTableHeaderにJButtonを追加する #navi(../) #tags(JTable, JTableHeader, JButton, JPopupMenu, MouserListener) RIGHT:Posted by &author(aterai); at 2011-11-07 *JTableHeaderにJButtonを追加する [#m34a7190] ``JTableHeader``にクリックするとポップアップメニューを表示する``JButton``を追加します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(https://lh3.googleusercontent.com/-ccZ08VSXYwE/Trd27UaeD2I/AAAAAAAABEk/1NAYoZ1NGV0/s800/ButtonInTableHeader.png) **サンプルコード [#g556fd49] #code(link){{ @Override public void mouseClicked(MouseEvent e) { JTableHeader header = (JTableHeader)e.getSource(); JTable table = header.getTable(); TableColumnModel columnModel = table.getColumnModel(); int vci = columnModel.getColumnIndexAtX(e.getX()); int mci = table.convertColumnIndexToModel(vci); TableColumn column = table.getColumnModel().getColumn(mci); Rectangle r = header.getHeaderRect(vci); Container c = (Container)getTableCellRendererComponent(table, "", true, true, -1, vci); //if(!isNimbus) { // Insets i = c.getInsets(); // r.translate(r.width-i.right, 0); //}else{ r.translate(r.width-BUTTON_WIDTH, 0); r.setSize(BUTTON_WIDTH, r.height); Point pt = e.getPoint(); if(c.getComponentCount()>0 && r.contains(pt) && pop!=null) { pop.show(header, r.x, r.height); JButton b = (JButton)c.getComponent(0); b.doClick(); e.consume(); } } @Override public void mouseExited(MouseEvent e) { rolloverIndex = -1; } @Override public void mouseMoved(MouseEvent e) { JTableHeader header = (JTableHeader)e.getSource(); JTable table = header.getTable(); TableColumnModel columnModel = table.getColumnModel(); int vci = columnModel.getColumnIndexAtX(e.getX()); int mci = table.convertColumnIndexToModel(vci); rolloverIndex = mci; } }} **解説 [#m5fb923c] 上記のサンプルでは、``JTableHeader``の各カラムにマウスカーソルがある場合、``HeaderRenderer#getTableCellRendererComponent(...)``内で、右端に``JButton``を追加しています。ボタンがクリックされたときに表示する``JPopupMenu``は、``JTableHeader``に追加したマウスリスナーでクリックされた位置などを取得して表示するようになっています。 //**参考リンク **コメント [#p1ee78e8] - ``Nimbus LnF``で、``JPopupMenu``が表示されないのを修正。 -- [[aterai]] &new{2011-11-07 (月) 22:15:02}; #comment