Java 更改jtable的列宽

Java 更改jtable的列宽,java,swing,Java,Swing,我试图更改列a jtable的列widith,但在编译代码时,widith保持不变 jTable2.setBackground(Color.WHITE); jTable2.setForeground(Color.BLACK); jTable2.setShowHorizontalLines(true); jTable2.setShowVerticalLines(true); jTable2.setRowHeight(50

我试图更改列a jtable的列widith,但在编译代码时,widith保持不变

            jTable2.setBackground(Color.WHITE);
        jTable2.setForeground(Color.BLACK);
       jTable2.setShowHorizontalLines(true);
       jTable2.setShowVerticalLines(true);
     jTable2.setRowHeight(50);
      jTable2.getTableHeader().getBackground().brighter();
     jTable2.getTableHeader().setBackground(Color.RED);
       jTable2.getTableHeader().setForeground(Color.blue);
    column1=  new ArrayList<> ();

     column1.add("Transaction Id");
     column1.add("Transaction Date");
     column1.add("Narration");
     column1.add("Value Date");
     column1.add("Debit Amount");
     column1.add("Credit Amount");
     column1.add("Ledger Balance");
     column1.add("Credit Account No.");
     column1.add("Credit Account Name");
     column1.add("Transaction Ref No.");
     column1.add("Cheque No.");
     column1.add("Transaction Type");
     column1.add("Staff ID");
     column1.add("Transaction Time");
     **for (int i = 0; i < jTable2.getModel().getColumnCount(); i++) {

   if (i == 2) {

   column=jTable2.getColumnModel().getColumn(i);
   column.setPreferredWidth(200);

   } else {
   column.setPreferredWidth(50);
   }}** 

    JDBCConnectionPigs csx = new JDBCConnectionPigs();
                    Connection csx1 = csx.createConnection();
   try {
   csx1.setAutoCommit(false); 
    PreparedStatement ps1 = csx1.prepareStatement("SELECT * FROM            bsanca01100000310");
    ResultSet rst=ps1.executeQuery();

    data5= new ArrayList<>();
    int i=0;
    while (rst.next())

   {
  data4= new ArrayList<> ();
 data4.add(0, rst.getInt("trn_id")+"");
   data4.add(1, rst.getDate("trn_date")+"");     
   data4.add(2, rst.getString("narration"));         
    data4.add(3, rst.getDate("value_date")+""); 
     data4.add(4, rst.getString("debit")); 
      data4.add(5, rst.getString("credit"));
      data4.add(6, rst.getString("ledger_balance"));
      data4.add(7, rst.getString("credit_account_no"));
      data4.add(8, rst.getString("credit_account_name"));
      data4.add(9, rst.getString("tra_ref_number"));
       data4.add(10, rst.getString("chq_number"));
       data4.add(11, rst.getString("trn_type"));
      data4.add(12, rst.getString("staff_id"));
        data4.add(13, rst.getTime("trn_time")+"");
           data5.add(i, data4);
         i++;
         }
       model= new    MyTableModel(data5,column1);  
        jTable2.setModel(model);

          csx1.setAutoCommit(true);
           }                                        
         catch (SQLException ex) {

               JOptionPane.showMessageDialog(null, ex.toString());

             }
jTable2.立根台(颜色:白色);
jTable2.设置前景(颜色:黑色);
jTable2.设置显示水平线(真);
jTable2.设置显示垂直线(真);
jTable2.设置行高(50);
jTable2.getTableHeader().getBackground().brighter();
jTable2.getTableHeader().setBackground(颜色:红色);
jTable2.getTableHeader().setForeground(Color.blue);
column1=新的ArrayList();
第1列添加(“交易Id”);
第1栏添加(“交易日期”);
第1栏添加(“叙述”);
第1栏添加(“起息日”);
第1栏添加(“借方金额”);
第1栏添加(“信贷金额”);
第1栏添加(“分类账余额”);
第1栏添加(“信用账号”);
第1栏添加(“信用账户名称”);
第1栏添加(“交易参考号”);
第1栏添加(“支票编号”);
第1栏添加(“交易类型”);
第1栏添加(“员工ID”);
第1栏添加(“交易时间”);
**对于(int i=0;i
有谁能帮我找出问题出在哪里,或者有更好的方法来实现这一点。对不起那个洗澡的人,因为这个问题很琐碎,但给了我很多时间

jTable2.setModel(model);
上述说法就是问题所在。更改表的
TableModel
时,会重新创建
TableColumnModel
,因此会丢失所有自定义列宽


更改模型后,您需要重置列宽。

您似乎只更改了第2列的最大宽度,而不是其首选宽度。@realpoint,我已将属性更改为PreferedWidth,但没有任何更改:@Googo,发布一个适当的说明您的问题的帖子。自定义表格模型与问题无关,不应包含在SSCCE中。也就是说,首先学习如何使用带有DefaultTableModel的JTable设置列宽。@camickr,好的,忽略表模型,可能会出现什么问题。因为我实际上认为,因为表实现了一个抽象表模型,所以可能不允许通过defaultablemodel进行调整。@Googo,列的宽度与视图(即JTable)相关,而不是与表模型(仅存储数据)相关。我不知道问题是什么,因为您的代码是错误的,并且您没有发布代码来演示问题。