无法将列宽设置为零,即不使列不可见 [英] could not set the column width to zero i.e. not made column invisible
问题描述
我试图从 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
fromTableModel
, 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屋!