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
而不是Views
到tableEvent.getColumnModel().getColumn(1).setPreferredWidth(60);
中设置列的宽度。如果我将表本身传递给方法getTableData()
以设置列的宽度,它实际上不起作用。有没有办法我可以在GeTableData()方法中以某种方式在Model类中指定表的前4列的所需宽度,以便它始终保持一致。现在我在Views类的构造函数的一部分有这个,这显然只是在初始化时它只能达到我想要的宽度。
答案 0 :(得分:1)
如果JTable
或TableModel
为空并且没有列信息,那么您需要自己提供该信息。
您可以创建新的TableColumnModel
,向其添加所需的TableColumns
,提供您想要/需要的宽度信息,并将该模型应用于JTable
。
然后,您需要填写TableModel
并将其提供给JTable
。
我个人会在尝试从中检索数据之前从ResultSet
中提取元数据。