无法将列宽设置为零,即不使列不可见 [英] could not set the column width to zero i.e. not made column invisible

查看:118
本文介绍了无法将列宽设置为零,即不使列不可见的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从 JTable 创建一个列,通过将宽度设置为零而不可见但是它不会发生并且它仍然可见width = 15.这是代码 -

I am trying to make one column from JTable, invisible by setting width to zero but it could not happen and it remain visible to width = 15. Here is code -

public void restoreColumnWithWidth(int column, int width) {
        try {
            TableColumn tableColumn = table.getColumnModel().getColumn(column);
            table.getTableHeader().setResizingColumn(tableColumn);
            tableColumn.setWidth(width);
            tableColumn.setMaxWidth(width);
            tableColumn.setMinWidth(width);
            tableColumn.setPreferredWidth(width);
        } catch (Exception ex) {
        }
    }

代码出了什么问题?

推荐答案


  • 不,永远不要删除 TableColumn 来自 TableModel ,这是错误的建议,而不是使用内置方法 JTable #removeColumn(TableColumn aColumn)

    • not, never to remove TableColumn from TableModel, this is wrong suggestion, instead of to use built-in method JTable#removeColumn(TableColumn aColumn),

      注意,此方法仅从View中删除列,在模型中删除列仍然显示,并且您可以还原,通过以下方式显示已删除的列使用 JTable#addColumn(TableColumn aColumn)

      notice, this method remove column only from View, in the model is removed column still presents, and you can revert that, visible the removed column by using JTable#addColumn(TableColumn aColumn)

      编辑

      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(100);
              }
              table.setPreferredScrollableViewportSize(table.getPreferredSize());
              restoreButton.addActionListener(new ActionListener() {
      
                  public void actionPerformed(ActionEvent e) {
                      tcm.getColumn(2).setPreferredWidth(100);
                  }
              });
              hideButton.addActionListener(new ActionListener() {
      
                  public void actionPerformed(ActionEvent e) {
                      tcm.getColumn(2).setPreferredWidth(000);
                  }
              });
              deleteButton.addActionListener(new ActionListener() {
      
                  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() {
      
                  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() {
      
                  public void run() {
                      TableRowHeight frame = new TableRowHeight();
                  }
              });
          }
      }
      

      EDIT2

      你必须检查

      JTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
      JTable.getTableHeader().setReorderingAllowed(false);
      

      这篇关于无法将列宽设置为零,即不使列不可见的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆