1

3 列のテーブルがあります。最初の列は特別で、タイトルの代わりにチェックボックスが含まれています。

問題は、チェックボックス ヘッダーのレイアウト (外観) が他のヘッダーと異なることです。誰でも助けることができますか?

コード:

import java.awt.*;  
import javax.swing.*;  
import javax.swing.table.*;  
import java.awt.event.*; 

public class JTableHeaderCheckBox  
{  
  Object colNames[] = {"", "String", "String"};  
  Object[][] data = {};  
  DefaultTableModel dtm;  
  JTable table;  
  public void buildGUI()  
  {  
    dtm = new DefaultTableModel(data,colNames);  
    table = new JTable(dtm);  
    for(int x = 0; x < 2; x++)  
    {  
      dtm.addRow(new Object[]{new Boolean(false),"Row "+(x+1)+" Col 2","Row "+(x+1)+" Col 3"});  
    }  
    JScrollPane sp = new JScrollPane(table);  
    TableColumn tc = table.getColumnModel().getColumn(0);  
    tc.setCellEditor(table.getDefaultEditor(Boolean.class));  
    tc.setCellRenderer(table.getDefaultRenderer(Boolean.class));  
    tc.setHeaderRenderer(new CheckBoxHeader());  
    JFrame f = new JFrame();  
    f.getContentPane().add(sp);  
    f.pack();  
    f.setLocationRelativeTo(null);  
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    f.setVisible(true);  
  }  

  public static void main (String[] args)  
  {  
    SwingUtilities.invokeLater(new Runnable(){  
      public void run(){  
        new JTableHeaderCheckBox().buildGUI();  
      }  
    });  
  }  
}  

class CheckBoxHeader extends JCheckBox implements TableCellRenderer {  
    protected CheckBoxHeader rendererComponent;  
    protected int column;  

    public CheckBoxHeader() {  
        rendererComponent = this;   
    }  

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {  
        setColumn(column);   
        return rendererComponent;  
    }  

    protected void setColumn(int column) {  
        this.column = column;  
    }  
    public int getColumn() {  
        return column;  
    }    
} 

奇妙な出力:

ここに画像の説明を入力

更新:
私が欲しいもの:

  1. ヘッダーのチェックボックスを中央揃えにします
  2. よく注意すると、チェックボックスのヘッダーの背景 (内側に飛び出しているように見える) が、他の 2 つのヘッダー (飛び出して見える)とは異なっていることに気付きます。
4

2 に答える 2

4

チェックボックスの境界線を参照している場合は、これを試してヘッダーの外観をより一貫させることができます。

public CheckBoxHeader() {  
    rendererComponent = this;  

    setHorizontalAlignment(JLabel.CENTER);
    setBorderPaintedFlat(true);
    setBorderPainted(true);
}  
于 2012-01-31T19:04:48.433 に答える
3

TableCellRendererが返さJLabel/JComponentsれ、これらのJComponents には LayoutManager が実装されていませんが、一部を設定するための制限はありません。LayoutManagers

于 2012-01-31T18:46:51.647 に答える