2014-03-27 102 views
0

我使用NetBeans IDE 8.0創建GUI程序,我需要顯示具有不同大小列的表格。
使用鏈接到MySql表的JtableBinding,它顯示了網格中所有列設置爲相同寬度的內容。
我會通過代碼更改列寬,但我注意到,對於JtableBinding,不存在TableColumnModel,而我在JTable對象中擁有它。如何設置JTableBinding中列的大小?

是否有可能設置不同大小在一個JtableBinding每列?
感謝所有給我答覆的人。

+0

您將使用您的自定義列寬創建表結構,然後相應的對象將綁定jtablebinding嘗試 – Sathiyaraj

+0

它不起作用。看起來JTableBinding在JTable中看不到更改,即使我在綁定之前和之後創建它們。 :( – user3468526

+0

'我注意到JtableBinding沒有一個TableColumnModel' - 我從來沒有使用過JTableBinding,但看起來你仍然需要一個JTable,所以你改變了由JTable創建的TableColumnModel的TableColumns,這必須在你之後完成已設置JTable的TableModel – camickr

回答

0

這是我用JTableBinding實現的類。列寬設置很好。

public class TMZeit extends JTable { 
    private static final long serialVersionUID = 8639962215280391425L; 
    private List<Zeit> list; 
    private ResourceBundle bundle; 
    private Object[][] columns; 

    public TMZeit(ResourceBundle bundle) { 
    this.list = ObservableCollections.observableList(new ArrayList<Zeit>()); 
     this.bundle = bundle; 
    this._initComponents(); 
    } 

    @SuppressWarnings({ "rawtypes", "unchecked" }) 
    private void _initComponents() { 
     this._initColumns(); 

    JTableBinding<Zeit, List<Zeit>, JTable> jTableBinding = SwingBindings 
     .createJTableBinding(AutoBinding.UpdateStrategy.READ, 
      this.list, this); 

    for (int i = 0; i < this.columns.length; ++i) { 
     ELProperty<Zeit, String> property = ELProperty.create(String 
      .format("${%s}", columns[i][1])); 
     ColumnBinding columnBinding = jTableBinding 
      .addColumnBinding(property); 
     columnBinding.setColumnClass((Class<?>) this.columns[i][2]); 
     columnBinding.setColumnName((String) this.columns[i][0]); 
     columnBinding.setEditable(false); 
    } 

    jTableBinding.bind(); 

    for (int i = 0; i < this.columns.length; ++i) { 
     this.getColumnModel().getColumn(i) 
      .setPreferredWidth((Integer) this.columns[i][3]); 
    } 
    } 

    private void _initColumns() { 
    this.columns = new Object[][] { 
     { this.bundle.getString("table.column.serno.tooltip"), "serno", 
      Integer.class, 30 }, 
     { this.bundle.getString("table.column.project.tooltip"), 
      "project", String.class, 230 }, 
     { this.bundle.getString("table.column.activity.tooltip"), 
      "activity", String.class, 230 }, 
     { this.bundle.getString("table.column.time.tooltip"), "time", 
      Integer.class, 50 } }; 
    } 
... 
} 

對不起,格式不正確。