TITLE:JTableのセル幅で文字列を折り返し

JTableのセル幅で文字列を折り返し

編集者:Terai Atsuhiro~

作成日:2004-07-12
更新日:2023-12-14 (木) 10:20:14
  • 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

概要

JTableのセル幅に合わせて文字列を折り返します。

概要

JTableのセル幅に合わせて文字列を折り返します。

サンプルコード

#spanend
#spanadd
TableColumnModel tcm = table.getColumnModel();
#spanend
#spanadd
tcm.getColumn(1).setCellRenderer(new TestRenderer());
#spanend
#spanadd
tcm.getColumn(2).setCellRenderer(new TextAreaCellRenderer());
#spanend
#spanadd
// ...
#spanend
#spanadd
class TextAreaCellRenderer extends JTextArea implements TableCellRenderer {
#spanend
  TextAreaCellRenderer() {
    super();
    setLineWrap(true);
  }

#spandel
#screenshot
#spanend
  @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 {
      setForeground(table.getForeground());
      setBackground(table.getBackground());
    }
    setText((value == null) ? "" : value.toString());
    return this;
  }
#spanadd
}
#spanend
#spanadd
// ...
#spanend
#spanadd
class TestRenderer extends MyJLabel implements TableCellRenderer {
#spanend
  public TestRenderer() {
    super();
    setOpaque(true);
    setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5));
  }

#spandel
**サンプルコード [#o9ff0afa]
#spanend
#spandel
#code{{
#spanend
 TableColumnModel tcm = table.getColumnModel();
 tcm.getColumn(1).setCellRenderer(new TestRenderer());
 tcm.getColumn(2).setCellRenderer(new TextAreaCellRenderer());
  @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 {
      setForeground(table.getForeground());
      setBackground(table.getBackground());
    }
    // setHorizontalAlignment((value instanceof Number) ? RIGHT : LEFT);
    setFont(table.getFont());
    setText((value == null) ? "" : value.toString());
    return this;
  }
#spanadd
}
#spanend

 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) {
       setForeground(table.getSelectionForeground());
       setBackground(table.getSelectionBackground());
     }else{
       setForeground(table.getForeground());
       setBackground(table.getBackground());
     }
     setText((value == null) ? "" : value.toString());
     return this;
   }
 }
#spanadd
class MyJLabel extends JLabel {
#spanend
  private GlyphVector gvtext;
  public MyJLabel() {
    super();
  }

 class TestRenderer extends MyJLabel implements TableCellRenderer {
   public TestRenderer() {
     super();
     setOpaque(true);
     setBorder(BorderFactory.createEmptyBorder(0,5,0,5));
   }
   public Component getTableCellRendererComponent(JTable table, Object value,
                                        boolean isSelected, boolean hasFocus,
                                        int row, int column) {
     if(isSelected) {
       setForeground(table.getSelectionForeground());
       setBackground(table.getSelectionBackground());
     }else{
       setForeground(table.getForeground());
       setBackground(table.getBackground());
     }
     //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;
     ......
     g2.drawGlyphVector(gvtext,
                        getInsets().left,
                        getFont().getSize()+getInsets().top);
   }
   ......
 }
  @Override protected void paintComponent(Graphics g) {
    // super.paintComponent(g);
    Graphics2D g2 = (Graphics2D) g;
    // ...
    g2.drawGlyphVector(gvtext,
                       getInsets().left,
                       getFont().getSize()+getInsets().top);
  }
  // ...
#spanadd
}
#spanend
View in GitHub: Java, Kotlin
  • &jnlp;
  • &jar;
  • &zip;

解説

  • 1列目
    • 文字列の折り返しで作成したJLabelを継承するレンダラーを使って、セル幅に合わせて折り返しています。

解説

  • 0列目
    • デフォルトのJLabelを継承するDefaultTableCellRendererを使用し超過分は...で省略
  • 1列目
    • 文字列の折り返しで作成したJLabelを継承するレンダラーを使ってセル幅に合わせて折り返し
  • 2列目
    • JTextAreaを継承するTableCellRendererを作成しJTextArea#setLineWrap(boolean)メソッドを使用して折り返しを有効化
  • 2列目
    • JTextAreaを継承するTableCellRendererを作成し、このレンダラーをJTextArea#setLineWrap(boolean)メソッドを使って折り返しを有効にしています。

参考リンク

参考リンク

コメント