2016-04-02 8 views
1

私は4つの列を持つJTableを持っています。私はそれらの列のうちの1つのヘッダーを中央に揃えようとしています。私は半分の解決策を得ましたが、問題はヘッダーのデフォルトのレンダリング/スタイルが失われているようです。スクリーンショットを参照してください。私は現在のTableCellRendererを取得し、ヘッダーの配置をCENTERに変更し、適合したTableCellRendererを特定の列に適用したいと考えています。これどうやってするの?デフォルトレンダリングを失うことなくTableCellRendererを変更するにはどうすればよいですか?

テーブルのスクリーンショット

enter image description here

私のJTableクラス

public class MyTable extends JTable { 

public MyTable() { 
    String[] headers = { "Parent", "Summary", "Key", "Processed" }; 
    MyTableModel model = new MyTableModel(headers); 

    Object[] testrow = { "TST-99999", "S", "K", false }; 
    model.addRow(testrow); 

    setModel(model); 

    Enumeration<TableColumn> columns = getColumnModel().getColumns(); 
    while (columns.hasMoreElements()) { 
     TableColumn column = (TableColumn) columns.nextElement(); 
     System.out.println(column.getHeaderValue()); 
     column.setResizable(false); 
     switch ((String) column.getHeaderValue()) { 
     //case "Parent": 
     //case "Key": 
     case "Processed": 
      column.setMaxWidth(80); 
      column.setMinWidth(80); 
      column.setHeaderRenderer(new CenterRenderer()); 
      break; 
     } 
    } 
} 
} 

私のTableModelクラス

public class MyTableModel extends DefaultTableModel { 

public MyTableModel(String[] headers) { 
    for(String header:headers){ 
     addColumn(header); 
    } 
} 

@Override 
public boolean isCellEditable(int row, int column) { 
    return false; 
} 


@Override 
public Class<?> getColumnClass(int index) { 
    switch (index) { 
    case 0: 
     return String.class; 
    case 1: 
     return String.class; 
    case 2: 
     return String.class; 
    case 3: 
     return Boolean.class; 
    default: 
     return String.class; 
    } 

} 

}

マイTableCellRendererをクラス

public class CenterRenderer extends DefaultTableCellRenderer { 
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
    JLabel label = (JLabel) super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
    label.setHorizontalAlignment(SwingConstants.CENTER); 
    return label; 
} 
} 
+1

そして、あなたのコードがある... –

+0

コードどのようにあなたを投稿してくださいここにいる人々があなたを助けることができるように、あなたがしたことを達成しました。デフォルトでは – Blip

+0

のヘッダーテキストが中央に表示されます。 – Braj

答えて

2

代わりDefaultTableCellRendererを拡張する、JTableHeaderでのデフォルトのレンダラに委譲:

public class CenterRenderer implements TableCellRenderer { 
    private final JTableHeader header; 

    public CenterRenderer(JTableHeader header) { 
     this.header = header; 
    } 

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { 
     JLabel label = (JLabel) header.getDefaultRenderer().getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); 
     label.setHorizontalAlignment(SwingConstants.CENTER); 
     return label; 
    } 
} 
+0

私を訂正してくれてありがとう。 – Braj

+0

答えをありがとう!これはさらに優れています。 –

関連する問題