2013-04-19 3 views
4

Helo, я искал ответ во многих местах, но у меня нет решения, можете ли вы помочь мне в этом?JTable change Column Font

Я создаю таблицу, где хочу сделать первую колонку с более высоким размером шрифта.

Например, в столбце 0 Я хочу Размер шрифта 30 и на колонках 1-3 г хотите Размер шрифта 13.

Вот мой код

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.io.*; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 
import javax.swing.table.*; 

public class kanji_list extends JFrame { 

kanji_list(){ 

    JTable table = new JTable(); 
    JScrollPane scroll = new JScrollPane(); 
    Image icon = Toolkit.getDefaultToolkit().getImage("JLPT.jpg"); 
    ImageIcon ima = new ImageIcon("JLPT.jpg"); 

    DefaultTableModel model = new DefaultTableModel(get_data(), get_header()); 


    table = new JTable(model){ 
     public boolean isCellEditable(int rowIndex, int vColIndex){ 
      return false; 
     } 
    }; 
    JTableHeader th = table.getTableHeader(); 
    TableColumnModel tcm = th.getColumnModel(); 
    TableColumn column = null; 
    table.setFont(new Font("Microsoft JhengHei", Font.BOLD, 13)); 
    for (int i = 0; i < 4; i++) { 
     column = table.getColumnModel().getColumn(i); 
     DefaultTableCellRenderer tcr = new DefaultTableCellRenderer(); 
     tcr.setHorizontalAlignment(SwingConstants.CENTER); 
     column.setCellRenderer(tcr); 
     if (i==0) { 
      column.setPreferredWidth(50); 
     } 
     else{ 
      if(i==1){ 
       column.setPreferredWidth(175); 
      } 
      else{ 
       if(i==2){ 
        column.setPreferredWidth(200); 
       } 
       else{ 
        column.setPreferredWidth(875); 
       } 
      } 
     } 
    }  
    table.setRowHeight(table.getRowHeight()+30); 
    table.setModel(model); 
    scroll.add(table); 
    this.add(scroll); 
    this.setTitle("Katakana"); 
    this.setSize(1350, 700); 
    this.setIconImage(icon); 
    this.setVisible(true); 
    this.setLocationRelativeTo(null); 

    scroll.setViewportView(table); 
} 
Object [][]get_data(){ 
    Object data[][] = new Object[][]{ 
     {"\u4e00", "Uno, 1", "ICHI, ITSU", "hito-, hitotsu"}, 
     {"\u4e8c", "Dos, 2", "NI, JI", "futa, futatsu, futatabi"}, 
     {"\u4e09", "Tres, 3", "SAN, JOU", "mi, mitsu, mittsu"}, 
     {"\u99c5", "Estación", "EKI", ""} 
    }; 
    return data; 
} 
String []get_header(){ 
    String header [] = new String[]{"KANJI", "SIGNIFICADO", "LECTURA ON", "LECTURA KUN"}; 
    return header; 
} 

}

Это Японская система обучения и Kanjis на unicode в 1-м столбце вообще не видны с моим шрифтом 13-го размера, но если я сделаю всю таблицу более высокого размера, все остальные столбцы станут больше, и это выглядит не очень хорошо.

Думаю, я объяснил свою проблему.

Я пробовал это с множеством разных идей, но я не получаю никакого результата.

ответ

11

В основном JTable вам в основном нужен собственный рендерер, который устанавливает шрифт на что-то отличное от шрифта таблицы, f.i. в подклассе DefaultTableCellRenderer. Обратите внимание, что установка шрифта в DefaultTableCellRenderer один раз после создания экземпляра не будет работать, потому что он сбрасывается при каждом вызове getTableCellRendererComponent.

JTable table = new JTable(new AncientSwingTeam()); 
// the default renderer uses the table's font, 
// so set it as appropriate 
table.setFont(fontToUseForAllColumnsExceptFirst); 
// a custom renderer which uses a special font 
DefaultTableCellRenderer r = new DefaultTableCellRenderer() { 
    Font font = fontToUseForFirstColumn; 

    @Override 
    public Component getTableCellRendererComponent(JTable table, 
      Object value, boolean isSelected, boolean hasFocus, 
      int row, int column) { 
     super.getTableCellRendererComponent(table, value, isSelected, hasFocus, 
       row, column); 
     setFont(font); 
     return this; 
    } 

}; 
// doesn't work because the default renderer's font is reset 
// to the table's font always 
// r.setFont(font); 
// set the custom renderer for first column 
table.getColumnModel().getColumn(0).setCellRenderer(r); 

Альтернативой является украшением визуализатор подход, поддерживаемый в проекте SwingX (смещенного меня не может сопротивляться :-) Тогда выше будет два лайнера (предполагая, что таблица имеет тип JXTable):

Highlighter hl = new FontHighlighter(font); 
table.getColumnExt(0).setHighlighter(hl); 
+1

Прошу, пожалуйста, что не так (за исключением Nimbus) с 'table.getTableHeader(). SetFont (new Font (null, Font.PLAIN, 23));' – mKorbel

+0

@mKorbel ничего плохого :-) Только это не связано с вопросом как Я это понимаю: речь идет о шрифте за столбец, который отличается от шрифта таблицы. – kleopatra

+0

:-) мой specum, вероятно, так почему, почему я должен читать ... – mKorbel