【问题标题】:How to set column width in JTable/JXTable?如何在 JTable/JXTable 中设置列​​宽?
【发布时间】:2013-02-16 00:12:18
【问题描述】:

我的应用程序由几个 JTable 组成。 JXT 表。目标是存储列宽并在启动时重新加载它们。

但是下面的代码对表格的列宽没有任何改变:

tblTasks.getColumn(1).setWidth(36);

而且这个什么也不做:

tblTasks.getColumn(1).setPreferredWidth(36);

有什么想法吗?

【问题讨论】:

    标签: java swing jtable column-width jxtable


    【解决方案1】:

    我所做的是将每列的最小宽度设置为一个值。对于最后一列的首选宽度,我选择 Integer.MAX_VALUE,这会将所有其他列推到最小尺寸。

    这是我项目中的一个 sn-p:

    ruleTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
    ruleTable.getColumnModel().getColumn(0).setMinWidth(25);
    ruleTable.getColumnModel().getColumn(1).setMinWidth(125);
    ruleTable.getColumnModel().getColumn(2).setMinWidth(175);
    ruleTable.getColumnModel().getColumn(2).setMaxWidth(Integer.MAX_VALUE);
    

    希望它会帮助你和其他人......对你来说可能有点晚了;-P

    【讨论】:

      【解决方案2】:
      table.getColumn("Column Name").setMaxWidth(36);
      

      【讨论】:

        【解决方案3】:
        table.getColumn("Column Name").setMinWidth(36);
        

        【讨论】:

          【解决方案4】:

          但是下面的代码并没有改变 表:

          tblTasks.getColumn(1).setWidth(36);
          

          而且这个什么也不做:

          tblTasks.getColumn(1).setPreferredWidth(36);
          

          有什么想法吗?

          .

          正确的构造函数是JTable.getColumnModel().getColumn(0).setPreferredWidth(36);

          例如

          import java.awt.BorderLayout;
          import java.awt.EventQueue;
          import java.awt.Font;
          import java.awt.event.ActionEvent;
          import java.awt.event.ActionListener;
          import java.util.Stack;
          import javax.swing.JButton;
          import javax.swing.JFrame;
          import javax.swing.JPanel;
          import javax.swing.JScrollPane;
          import javax.swing.JTable;
          import javax.swing.WindowConstants;
          import javax.swing.table.DefaultTableModel;
          import javax.swing.table.TableColumn;
          import javax.swing.table.TableColumnModel;
          
          public class TableRowHeight {
          
              private static final long serialVersionUID = 1L;
              private JFrame frame = new JFrame("p*s*s*s*s*t*t");
              private String[] columnNames = {"one", "two", "Playing with", "four", "five",};
              private String[][] data = {
                  {"aaaaaa", "bbbbbb", "cccccc", "dddddd", "eeeeeee",},
                  {"bbbbbb", "cccccc", "dddddd", "eeeeeee", "aaaaaa",},
                  {"cccccc", "dddddd", "eeeeeee", "aaaaaa", "bbbbbb",},
                  {"dddddd", "eeeeeee", "aaaaaa", "bbbbbb", "cccccc",},
                  {"eeeeeee", "aaaaaa", "bbbbbb", "cccccc", "dddddd",}};
              private JTable table = new JTable(new DefaultTableModel(data, columnNames));
              private TableColumnModel tcm = table.getColumnModel();
              private Stack<TableColumn> colDeleted = new Stack<TableColumn>();
              private JButton restoreButton = new JButton("Restore Column Size");
              private JButton hideButton = new JButton("Set Column Size to Zero");
              private JButton deleteButton = new JButton("Delete Column");
              private JButton addButton = new JButton("Restore Column");
          
              public TableRowHeight() {
                  table.setRowMargin(4);
                  table.setRowHeight(30);
                  table.setFont(new Font("SansSerif", Font.BOLD + Font.PLAIN, 20));
                  JScrollPane scrollPane = new JScrollPane(table);
                  for (int i = 0; i < (tcm.getColumnCount()); i++) {
                      tcm.getColumn(i).setPreferredWidth(150);
                  }
                  table.setPreferredScrollableViewportSize(table.getPreferredSize());
                  restoreButton.addActionListener(new ActionListener() {
          
                      @Override
                      public void actionPerformed(ActionEvent e) {
                          tcm.getColumn(2).setPreferredWidth(100);
                      }
                  });
                  hideButton.addActionListener(new ActionListener() {
          
                      @Override
                      public void actionPerformed(ActionEvent e) {
                          tcm.getColumn(2).setPreferredWidth(000);
                      }
                  });
                  deleteButton.addActionListener(new ActionListener() {
          
                      @Override
                      public void actionPerformed(ActionEvent e) {
                          if (table.getColumnCount() > 0) {
                              TableColumn colToDelete = table.getColumnModel().getColumn(table.getColumnCount() - 1);
                              table.removeColumn(colToDelete);
                              table.validate();
                              colDeleted.push(colToDelete);
                              addButton.setEnabled(true);
                          } else {
                              deleteButton.setEnabled(false);
                          }
                      }
                  });
                  addButton.addActionListener(new ActionListener() {
          
                      @Override
                      public void actionPerformed(ActionEvent e) {
                          if (colDeleted.size() > 0) {
                              table.addColumn(colDeleted.pop());
                              table.validate();
                              deleteButton.setEnabled(true);
                          } else {
                              addButton.setEnabled(false);
                          }
                      }
                  });
                  JPanel btnPanel = new JPanel();
                  btnPanel.add(hideButton);
                  btnPanel.add(restoreButton);
                  btnPanel.add(deleteButton);
                  btnPanel.add(addButton);
                  frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
                  frame.add(scrollPane, BorderLayout.CENTER);
                  frame.add(btnPanel, BorderLayout.SOUTH);
                  frame.pack();
                  frame.setLocation(150, 150);
                  frame.setVisible(true);
              }
          
              public static void main(String[] args) {
                  EventQueue.invokeLater(new Runnable() {
          
                      @Override
                      public void run() {
                          TableRowHeight frame = new TableRowHeight();
                      }
                  });
              }
          }
          

          【讨论】:

            猜你喜欢
            • 2010-10-31
            • 1970-01-01
            • 2012-10-27
            • 2023-03-07
            • 2012-09-15
            • 1970-01-01
            • 1970-01-01
            • 2013-10-01
            • 1970-01-01
            相关资源
            最近更新 更多