Java 从另一个类设置JTable列宽

Java 从另一个类设置JTable列宽,java,swing,user-interface,jtable,tablemodel,Java,Swing,User Interface,Jtable,Tablemodel,上面是Model类的一个方法,负责为我在名为tableEvent的视图中的表设置表模型 控制器类使用上述方法设置更改视图类的tableEvent的状态。请注意视图中的tableEvent为空/没有任何内容。模型将rs的值传递给控制器,然后控制器将更改表的显示并填充值 我的意思是: view.tableEvent.setModel(model.getTableData()) 但是,我试图通过tableEvent.getColumnModel().getColumn(1).setPreferredW

上面是Model类的一个方法,负责为我在名为
tableEvent
的视图中的表设置表模型

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

我的意思是:

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


但是,我试图通过
tableEvent.getColumnModel().getColumn(1).setPreferredWidth(60)在
Model
中设置列的宽度,而不是在
视图中设置列的宽度。如果我将表本身传递给方法
getTableData()
,以设置列的宽度,那么它实际上不起作用。是否有一种方法可以指定geTableData()方法中模型类中表的前4列的所需宽度,以便它始终保持一致。现在我在Views类的构造函数中看到了这个,这显然意味着它只有在初始化时才达到我想要的宽度

如果
JTable
TableModel
为空且没有列信息,则您需要自己提供该信息

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

然后您需要填写
表格模型
,并将其提供给
JTable


我个人会先从
ResultSet
中提取元数据,然后再尝试从中检索数据。

您可以看到上面的方法正在返回模型,其中包括视图中的表已经使用的列。那么,如何在返回时将列大小与其关联呢?我假设您返回的是
TableModel
,它只包含列信息的名称和数量。
JTable
使用该信息自动生成列(默认情况下,您可以对此进行更改)。您还需要以某种方式提供
TableColumnModel
。我将更改方法以返回您自己的模型,其中包含
TableModel
TableColumnModel
    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; 
}