スイング:TableCellRendererを細胞のいくつかのために太字を使用しています

StackOverflow https://stackoverflow.com/questions/2224865

質問

簡単な質問が、私はどこでもオンライン答えを見つけるように見えることはできません。

をどのように太字で表のセルの一部をレンダリングするためのカスタム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
    }
  }

私は、レンダリングのテキストスタイルが似て変化すると仮定しますが、どのようにデフォルト・テーブル・フォントと同じであるが、太字にするフォントを設定するのですか?

役に立ちましたか?

解決

あなたはすでに(私はc.getFont()されるだろうと仮定)デフォルトのテーブルのフォントを得ることができる場合は、

、そしてちょうどのhref = "http://java.sun.com/javase/6/docs/api/java/awt <使用その上/Font.html#deriveFont(int)」REL = "nofollowをnoreferrer"> deriveFont(Font.BOLD)

他のヒント

キャッシュで大胆にフォントを設定し、ここですでに説明したように、動作します。

使用HTML -

の場合では、太字のテキストの一部だけを設定する必要があります。表のセルレンダラーはJLabelに基づいています(または、あなたは1を返すことができます)。 HTMLにテキストを変換すると、ほぼすべてのテキスト属性の変更を許可します。

私たちは、広範囲にこのテクニックを使用し、重大なパフォーマンスの低下を見ていない。

使用DefaultTableCellRendererJLabelのサブクラスである)、あなたは大胆な書体を使用したいときに指定する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);
  }
}

あなたもこれを使用することができます..

        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;

    }

}
scroll top