2

簡単な質問ですが、オンラインのどこにも答えが見つからないようです。

カスタムTableCellRendererを使用して、一部のテーブルセルを太字でレンダリングするにはどうすればよいですか?

TableCellRendererを使用して、セルごとに背景色を設定する方法を知っています。あなたは次のようなことをします:

  public class MyTableCellRenderer extends DefaultTableCellRenderer 
  {
    @Override public Component getTableCellRendererComponent(JTable table,
       Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        Component c = super.getTableCellRendererComponent(table, value,
          isSelected, hasFocus, row, column);
        // modify the component "c" to have whatever attributes you like
        // for this particular cell
    }
  }

レンダリングテキストスタイルの変更も同様だと思いますが、フォントをデフォルトのテーブルフォントと同じに太字で設定するにはどうすればよいですか?

4

5 に答える 5

5

デフォルトのテーブルフォント(おそらくそうなるでしょうc.getFont())をすでに取得できる場合は、それを使用deriveFont(Font.BOLD)してください。

于 2010-02-08T21:11:41.130 に答える
5

また、フォントを変更するセルをより柔軟に制御できるテーブル行レンダリングアプローチを検討することもできます。選択した行のすべての列のテキストを太字にするために使用しました。

于 2010-02-08T21:21:49.863 に答える
1

怠惰な人のアプローチは次のとおりです。DefaultTableCellRenderer(のサブクラスであるJLabel)を使用し、HTMLを使用して、太字の書体をいつ使用するかを指定します。

独自のカスタムレンダラーを定義してフォントを直接制御するほどのパフォーマンスは得られませんが、コードは一般的にコンパクトであるため、単純なアプリケーションに適しています。

/**
 * Renderer implementation for rendering Strings.
 * Strings beginning with 'A' are rendered in bold.
 */
public class MyRenderer extends DefaultTableCellRenderer {
  public Component getTableCellRendererComponent(JTable table,
                                               Object value,
                                               boolean isSelected,
                                               boolean hasFocus,
                                               int row,
                                               int column) {

    String txt = String.valueOf(value);

    if (txt != null && txt.startsWith("A")) {
      // Reassign value as an HTML string.
      // Obviously need to consider replacing HTML special characters
      // if doing this properly.
      value = String.format("<body><b>%s</b></body>", txt);
    }

    // Delegate to superclass which will set the label text, background, etc.
    return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
  }
}
于 2010-02-08T23:18:48.320 に答える
1

すでにここで説明したように、キャッシュを使用してフォントを太字に設定すると機能します。

テキストの一部のみを太字で設定する必要がある場合は、HTMLを使用してください。テーブルセルレンダラーはに基づいていJLabelます(または、1つ返すことができます)。テキストをhtmlに変換すると、ほとんどすべてのテキスト属性を変更できます。

この手法を幅広く使用しており、パフォーマンスの大幅な低下は見られませんでした。

于 2010-02-08T22:41:37.703 に答える
0

これも使えます。

        class SampleRenderer extends DefaultTableCellRenderer
        {

        public Component getJtableCellRendererComponent(Jtable table,Object value,boolean     isSelected , boolean hasFocus , int row, int column)

        {

        JLabel c = (JLabel)super.getJtableCellRendererComponent(table,value,isSelected ,hasFocus , row, column);

        Font f = c.getFont();

        c.setFont(f.getName(),Font.BOLD,f.getSize()));

        return c;

    }

}
于 2010-02-09T03:03:21.433 に答える