Swing/HeaderTooltips のバックアップ(No.6)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- Swing/HeaderTooltips へ行く。
- 1 (2005-09-29 (木) 13:01:27)
- 2 (2006-02-27 (月) 16:01:02)
- 3 (2007-04-03 (火) 22:44:17)
- 4 (2007-05-22 (火) 13:51:33)
- 5 (2009-10-07 (水) 01:00:19)
- 6 (2009-10-12 (月) 17:43:12)
- 7 (2012-08-02 (木) 16:17:49)
- 8 (2013-03-30 (土) 20:57:10)
- 9 (2015-10-02 (金) 21:09:37)
- 10 (2016-09-08 (木) 17:56:29)
- 11 (2017-10-22 (日) 18:49:33)
- 12 (2017-12-01 (金) 13:23:38)
- 13 (2019-08-09 (金) 18:35:18)
- 14 (2021-04-08 (木) 13:28:56)
- 15 (2023-04-20 (木) 21:33:01)
- 16 (2024-02-09 (金) 13:14:41)
TITLE:JTableHeaderのTooltipsを列ごとに変更
Posted by terai at 2005-05-23
JTableHeaderのTooltipsを列ごとに変更
JTableHeaderのTooltipsが、カーソルのある列の内容などを表示するようにします。
- &jnlp;
- &jar;
- &zip;
#screenshot
サンプルコード
JTableHeader header = new JTableHeader(table.getColumnModel()) {
public String getToolTipText(MouseEvent e) {
int c = columnAtPoint(e.getPoint());
return getTable().getColumnName(c)
+"################################";
}
};
table.setTableHeader(header);
解説
上記のサンプルでは、JTableHeader#getToolTipTextメソッドをオーバーライドして、マウスカーソルの下にあるカラムヘッダの名前などをTooltipsとして返すようにしています。
コメント
- 文字列がクリップされている場合だけ、ToolTipを表示する -- terai
//HeaderToolTips.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class HeaderToolTips { public JComponent makeUI() { String[] columnNames = {"StringStringStringString", "Integer", "Boolean"}; Object[][] data = { {"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA", 12, true}, {"CCC", 92, true}, {"DDD", 0, false} }; DefaultTableModel model = new DefaultTableModel(data, columnNames) { @Override public Class<?> getColumnClass(int column) { return getValueAt(0, column).getClass(); } }; JTable table = new JTable(model); table.setAutoCreateRowSorter(true); JTableHeader h = table.getTableHeader(); h.setDefaultRenderer(new HeaderRenderer(h.getDefaultRenderer())); JPanel p = new JPanel(new BorderLayout()); p.add(new JScrollPane(table)); p.setPreferredSize(new Dimension(320, 240)); return p; } static class HeaderRenderer implements TableCellRenderer { private final TableCellRenderer renderer; private final Icon icon = UIManager.getIcon("Table.ascendingSortIcon"); public HeaderRenderer(TableCellRenderer renderer) { this.renderer = renderer; } public Component getTableCellRendererComponent(JTable table,Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel l = (JLabel)renderer.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column); Insets i = l.getInsets(); Rectangle rect = table.getCellRect(row, column, false); rect.width -= i.left + i.right; RowSorter<? extends TableModel> sorter = table.getRowSorter(); if(sorter!=null && sorter.getSortKeys().size()>0 && sorter.getSortKeys().get(0).getColumn()==column) { rect.width -= icon.getIconWidth() + 2; //XXX } FontMetrics fm = l.getFontMetrics(l.getFont()); String str = value.toString(); int cellTextWidth = fm.stringWidth(str); l.setToolTipText(cellTextWidth>rect.width?str:null); return l; } } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } public static void createAndShowGUI() { JFrame f = new JFrame(); f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); f.getContentPane().add(new HeaderToolTips().makeUI()); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } }