Swing/TableCellRenderer のバックアップの現在との差分(No.19)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/TableCellRenderer へ行く。
- 1 (2004-10-08 (金) 06:26:51)
- 2 (2004-11-04 (木) 10:12:36)
- 3 (2005-04-28 (木) 04:33:10)
- 4 (2005-06-16 (木) 03:14:48)
- 5 (2005-07-05 (火) 22:10:07)
- 6 (2005-09-21 (水) 21:54:39)
- 7 (2006-02-27 (月) 16:56:25)
- 8 (2006-06-22 (木) 17:20:47)
- 9 (2006-11-10 (金) 03:38:35)
- 10 (2007-03-13 (火) 19:47:04)
- 11 (2007-03-15 (木) 14:21:24)
- 12 (2007-05-17 (木) 18:06:02)
- 13 (2008-02-14 (木) 14:14:38)
- 14 (2008-05-08 (木) 18:25:18)
- 15 (2010-10-25 (月) 14:23:41)
- 16 (2010-12-10 (金) 10:12:40)
- 17 (2010-12-10 (金) 13:50:58)
- 18 (2010-12-10 (金) 17:43:28)
- 19 (2011-04-26 (火) 14:14:05)
- 20 (2013-04-10 (水) 16:08:52)
- 21 (2014-11-22 (土) 03:59:58)
- 22 (2015-01-07 (水) 16:17:40)
- 23 (2015-01-13 (火) 11:19:07)
- 24 (2016-07-19 (火) 22:24:33)
- 25 (2016-09-02 (金) 12:11:11)
- 26 (2017-10-12 (木) 13:39:11)
- 27 (2019-04-09 (火) 15:48:24)
- 28 (2021-01-23 (土) 21:36:28)
- 29 (2023-12-14 (木) 10:20:14)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JTableのセル幅で文字列を折り返し #navi(../) RIGHT:Posted by [[aterai]] at 2004-07-12 *JTableのセル幅で文字列を折り返し [#o1225d3b] JTableのセル幅に合わせて文字列を折り返します。 --- category: swing folder: TableCellRenderer title: JTableのセル幅で文字列を折り返し tags: [JTable, TableCellRenderer, JTextArea, JLabel] author: aterai pubdate: 2004-07-12T03:26:48+09:00 description: JTableのセル幅に合わせて文字列を折り返します。 image: https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTUbGVPssI/AAAAAAAAAmA/dPiTKpwf1Ro/s800/TableCellRenderer.png --- * 概要 [#summary] `JTable`のセル幅に合わせて文字列を折り返します。 -&jnlp; -&jar; -&zip; #download(https://lh4.googleusercontent.com/_9Z4BYR88imo/TQTUbGVPssI/AAAAAAAAAmA/dPiTKpwf1Ro/s800/TableCellRenderer.png) //#screenshot #ref(http://lh4.ggpht.com/_9Z4BYR88imo/TQTUbGVPssI/AAAAAAAAAmA/dPiTKpwf1Ro/s800/TableCellRenderer.png) **サンプルコード [#o9ff0afa] #code{{ * サンプルコード [#sourcecode] #code(link){{ TableColumnModel tcm = table.getColumnModel(); tcm.getColumn(1).setCellRenderer(new TestRenderer()); tcm.getColumn(2).setCellRenderer(new TextAreaCellRenderer()); }} #code{{ // ... class TextAreaCellRenderer extends JTextArea implements TableCellRenderer { TextAreaCellRenderer() { super(); setLineWrap(true); } public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(isSelected) { @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (isSelected) { setForeground(table.getSelectionForeground()); setBackground(table.getSelectionBackground()); }else{ } else { setForeground(table.getForeground()); setBackground(table.getBackground()); } setText((value == null) ? "" : value.toString()); return this; } } }} #code{{ // ... class TestRenderer extends MyJLabel implements TableCellRenderer { public TestRenderer() { super(); setOpaque(true); setBorder(BorderFactory.createEmptyBorder(0,5,0,5)); setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if(isSelected) { @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (isSelected) { setForeground(table.getSelectionForeground()); setBackground(table.getSelectionBackground()); }else{ } else { setForeground(table.getForeground()); setBackground(table.getBackground()); } //setHorizontalAlignment((value instanceof Number)?RIGHT:LEFT); // setHorizontalAlignment((value instanceof Number) ? RIGHT : LEFT); setFont(table.getFont()); setText((value == null) ? "" : value.toString()); return this; } } class MyJLabel extends JLabel { private GlyphVector gvtext; public MyJLabel() {super();} protected void paintComponent(Graphics g) { //super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; //...... public MyJLabel() { super(); } @Override protected void paintComponent(Graphics g) { // super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; // ... g2.drawGlyphVector(gvtext, getInsets().left, getFont().getSize()+getInsets().top); } //...... // ... } }} **解説 [#od38b372] - 1列目 -- [[文字列の折り返し>Swing/GlyphVector]]で作成したJLabelを継承するレンダラーを使って、セル幅に合わせて折り返しています。 * 解説 [#explanation] - `0`列目 -- デフォルトの`JLabel`を継承する`DefaultTableCellRenderer`を使用し超過分は`...`で省略 - `1`列目 -- [[文字列の折り返し>Swing/GlyphVector]]で作成した`JLabel`を継承するレンダラーを使ってセル幅に合わせて折り返し - `2`列目 -- `JTextArea`を継承する`TableCellRenderer`を作成し`JTextArea#setLineWrap(boolean)`メソッドを使用して折り返しを有効化 - 2列目 -- JTextAreaを継承するTableCellRendererを作成し、このレンダラーをJTextArea#setLineWrap(boolean)メソッドを使って折り返しを有効にしています。 //((%%日本語の折り返しが少しずれる場合がある?%%))。 * 参考リンク [#reference] - [[TableCellRendererでセルの背景色を変更>Swing/StripeTable]] - [[JTableのセルの高さを自動調整>Swing/AutoWrapTableCell]] -- セル幅だけでなく高さも調整する方法のサンプル **参考リンク [#k6d1f8d5] -[[TableCellRendererでセルの背景色を変更>Swing/StripeTable]] -[[JTableのセルの高さを自動調整>Swing/AutoWrapTableCell]] * コメント [#comment] #comment - メモ: `TextAreaCellRenderer`を、`NimbusLookAndFeel`で使ったとき、うまく余白を消す方法が分からない。 -- &user(aterai); &new{2008-05-08 (木) 18:25:18}; - ここの方法だと行の高さも自動変更してくれます。%%This JDK Tutorial shows you how to wrap text inside cells of a JTable%% (リンク切れ) -- &user(とおりすがり); &new{2010-12-10 (金) 10:12:40}; - ご指摘ありがとうございます。この方法なら、[[JTableのセルの高さを自動調整>Swing/AutoWrapTableCell]]で発生しているバグも修正できそうです。 -- &user(aterai); &new{2010-12-10 (金) 13:50:58}; -- スクロールバーの表示・非表示が繰り返されるバグは修正できそうだけど、高さが更新されない場合がある(上記の`www.roseindia.net`にある例だと、列幅をすこしずつ調整すると、`fox`が表示されなくなる)方は難しそう? -- &user(aterai); &new{2010-12-10 (金) 17:43:28}; **コメント [#v61c967e] - メモ: TextAreaCellRendererを、NimbusLookAndFeel で使ったとき、うまく余白を消す方法が分からない。 -- [[aterai]] &new{2008-05-08 (木) 18:25:18}; - ここの方法だと行の高さも自動変更してくれます。ttp://www.roseindia.net/javatutorials/JTable_in_JDK.shtml -- [[とおりすがり]] &new{2010-12-10 (金) 10:12:40}; - ご指摘ありがとうございます。この方法なら、[[JTableのセルの高さを自動調整>Swing/AutoWrapTableCell]]で発生しているバグも修正できそうです。 -- [[aterai]] &new{2010-12-10 (金) 13:50:58}; -- スクロールバーの表示・非表示が繰り返されるバグは修正できそうだけど、高さが更新されない場合がある(www.roseindia.netの例だと、列幅をすこしずつ調整すると、foxが表示されなくなる)方は難しそう? -- [[aterai]] &new{2010-12-10 (金) 17:43:28}; #comment