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类的方法,负责为我在Views中名为
tableEvent
的表设置表模型。Controller类使用上述方法来设置
tableEvent
类的Views
的状态更改。请注意,视图中的tableEvent
为空/无。模型将rs
的值传递给Controller
,这将更改表的显示并填充值。这是我的意思:
view.tableEvent.setModel(model.getTableData());
但是,我试图在
Model
中而不是在Views
到tableEvent.getColumnModel().getColumn(1).setPreferredWidth(60);
中设置列的宽度。如果我将表本身传递给方法getTableData()
以设置列的宽度,则它实际上不起作用。有没有一种方法可以某种方式在geTableData()方法中的Model类中指定表的前4列的所需宽度,以使其始终保持一致。现在,我在Views类的构造函数中拥有此函数,这显然意味着仅在初始化时才达到我期望的宽度。 最佳答案
如果JTable
或TableModel
为空并且没有列信息,那么您需要自己提供该信息。
您可以创建一个新的TableColumnModel
,将所需的TableColumns
添加到其中,提供所需的宽度信息,然后将该模型应用于JTable
。
然后,您需要填写TableModel
并将其提供给JTable
。
我个人将尝试从ResultSet
中提取元数据,然后再尝试从中提取数据。