如何在 JTable/JXTable 中设置列宽?
Posted
技术标签:
【中文标题】如何在 JTable/JXTable 中设置列宽?【英文标题】:How to set column width in JTable/JXTable? 【发布时间】:2013-02-16 00:12:18 【问题描述】:我的应用程序由几个 JTable 组成。 JXT 表。目标是存储列宽并在启动时重新加载它们。
但是下面的代码对表格的列宽没有任何改变:
tblTasks.getColumn(1).setWidth(36);
而且这个什么也不做:
tblTasks.getColumn(1).setPreferredWidth(36);
有什么想法吗?
【问题讨论】:
【参考方案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();
);
【讨论】:
以上是关于如何在 JTable/JXTable 中设置列宽?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 NavigationView 中设置列表的背景颜色