سؤال

سؤال بسيط، ولكن لا يمكنني العثور على الإجابة في أي مكان عبر الإنترنت.

كيف يمكنك استخدام TableCellRenderer مخصص لتقديم بعض خلايا الجدول في Boldface؟

أعرف كيفية استخدام 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
    }
  }

أود أن أفترض تغيير نمط النص التقديم مما يشبه، ولكن كيف يمكنك تعيين الخط ليكون هو نفسه خط الجدول الافتراضي ولكن في Boldface؟

هل كانت مفيدة؟

المحلول

إذا كنت تستطيع بالفعل الحصول على خط الجدول الافتراضي (الذي أفترض أنه سيكون c.getFont())، ثم فقط استخدام deriveFont(Font.BOLD) عليه.

نصائح أخرى

قد ترغب أيضا في النظر في جدول تقديم جدول النهج والتي قد تعطيك المزيد من المرونة قليلا في التحكم في الخلايا التي تقوم بتغيير الخط ل. لقد استخدمتها لتلقي النص في جميع أعمدة الصف المحدد.

وضع الخط إلى جريئة مع التخزين المؤقت، كما هو موضح بالفعل هنا، سوف تعمل.

في حال كنت بحاجة إلى تعيين جزء فقط من النص في HTML جريئة. تعتمد مصادرات خلية الجدول على JLabel (أو يمكنك العودة واحدة). سيحقق تحويل النص الخاص بك إلى HTML أي تغيير سمة نصي تقريبا.

نحن نستخدم هذه التقنية على نطاق واسع ولم نرى أي تدهور أداء كبير.

إليك نهج الرجل الكسول: استخدم 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);
  }
}

يمكنك استخدام هذا أيضا ..

        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;

    }

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top