Swing/HeaderTooltips のバックアップの現在との差分(No.6)
TITLE:JTableHeaderのTooltipsを列ごとに変更
Posted by terai at 2005-05-23
JTableHeaderのTooltipsを列ごとに変更
JTableHeaderのTooltipsが、カーソルのある列の内容などを表示するようにします。- category: swing folder: HeaderTooltips title: JTableHeaderのTooltipsを列ごとに変更 tags: [JTable, JTableHeader, JToolTip] author: aterai pubdate: 2005-05-23T10:16:01+09:00 description: JTableHeaderのTooltipsがカーソルのある列の内容などを表示するようにします。 image:
概要
JTableHeader
のTooltips
がカーソルのある列の内容などを表示するようにします。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
#screenshot
サンプルコード
#spanend
#spandel
JTableHeader header = new JTableHeader(table.getColumnModel()) {
#spanend
public String getToolTipText(MouseEvent e) {
int c = columnAtPoint(e.getPoint());
return getTable().getColumnName(c)
+"################################";
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
JTable table = new JTable(model);
#spanend
#spanadd
table.setTableHeader(new JTableHeader(table.getColumnModel()) {
#spanend
@Override public String getToolTipText(MouseEvent e) {
int i = columnAtPoint(e.getPoint());
TableColumn c = getColumnModel().getColumn(i);
return String.format("%s (width=%dpx)", c.getHeaderValue(), c.getWidth());
}
#spandel
};
#spanend
#spandel
table.setTableHeader(header);
#spanend
#spanadd
});
#spanend
解説
上記のサンプルでは、JTableHeader#getToolTipTextメソッドをオーバーライドして、マウスカーソルの下にあるカラムヘッダの名前などをTooltipsとして返すようにしています。解説
-
JTableHeader#getToolTipText(MouseEvent)
メソッドをオーバーライドしてマウスカーソルの下にあるカラムヘッダを取得- その名前とその幅を
TooltipsText
として使用
- その名前とその幅を
コメント
- 文字列がクリップされている場合だけ、ToolTipを表示する -- terai
#spanend #spandel //HeaderToolTips.java #spanend #spandel import java.awt.*; #spanend #spandel import java.awt.event.*; #spanend #spandel import javax.swing.*; #spanend #spandel import javax.swing.table.*; #spanend #spandel public class HeaderToolTips { #spanend 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); } #spandel } #spanend #spandel
参考リンク
- JTableHeader#getToolTipText() (Java Platform SE 8)
- JTableのTooltipsを行ごとに変更
- JTableのセルがクリップされている場合のみJToolTipを表示