从另一个类设置JTable列宽

时间:2013-01-23 23:15:34

标签: java swing user-interface jtable tablemodel

    public TableModel getTableData() {
     TableModel model=null;
    try {
        String sql = "SELECT eventID as 'Event ID', date as 'Date',eventName as 'Name', time as 'Start Time' FROM Event";
        pst = conn.prepareStatement(sql); 
        rs = pst.executeQuery();
        model = (DbUtils.resultSetToTableModel(rs));
       //CODE TO SET WIDTH OF JTABLE IN VIEWS
        }
    catch(SQLException e){
        e.printStackTrace();
    }
   finally {
        try {rs.close(); pst.close();}
        catch(SQLException e){}     }                                 
       return model; 
}

上面是Model类的一个方法,负责为名为tableEvent的Views中的表设置表模型。

Controller类使用上述方法设置更改tableEvent类的Views的状态。请注意,视图中的tableEvent为空/没有任何内容。模型将rs的值传递给Controller,然后更改表的显示并填充值。

这是我的意思:

view.tableEvent.setModel(model.getTableData());

但是,我尝试在Model而不是ViewstableEvent.getColumnModel().getColumn(1).setPreferredWidth(60);中设置列的宽度。如果我将表本身传递给方法getTableData()以设置列的宽度,它实际上不起作用。有没有办法我可以在GeTableData()方法中以某种方式在Model类中指定表的前4列的所需宽度,以便它始终保持一致。现在我在Views类的构造函数的一部分有这个,这显然只是在初始化时它只能达到我想要的宽度。

1 个答案:

答案 0 :(得分:1)

如果JTableTableModel为空并且没有列信息,那么您需要自己提供该信息。

您可以创建新的TableColumnModel,向其添加所需的TableColumns,提供您想要/需要的宽度信息,并将该模型应用于JTable

然后,您需要填写TableModel并将其提供给JTable

我个人会在尝试从中检索数据之前从ResultSet中提取元数据。