所以我现在正在玩JTables,我看到有关如何调整JTable大小以适应JFrame的大量答案。好吧,我试图做相反的事情。
我花了一天时间玩耍,并研究各种不同的方法来调整桌子的显示方式。我已经非常完美了(尽管我使用多种方法来实现这一目标可能有点草率,但是,嘿,我正在学习)。唯一的问题是我的Frame,它对于桌子来说有点小。
。我最后一栏中文字的最后几个字符(只有长名字的记录)被删除了。所以,现在我有两种方式可以考虑接近这一点,而且我很难搞清楚这两种方法。 1)扩展框架的大小,但将表格设置为固定大小,并且仅存在于框架的中心(两侧都有空白区域)。 2)根据表格的大小设置框架的大小。
无法弄清楚如何做其中任何一项。在下面粘贴我的代码。
唯一不存在的部分是1)TableColumnAdjuster,一个具有调整WordPress上的TableColumns的机制的类。如果您不熟悉它,请点击以下链接:https://tips4java.wordpress.com/2008/11/10/table-column-adjuster/
2)MyTableModel,我制作的AbstractTableModel的自定义版本。如果有必要添加它,我会。
public class AccountManager{
private static ArrayList<Account> accountArray = new ArrayList<Account>();
private JFrame mainWindow;
private JTable accountListTable;
private JScrollPane tableScrollPane;
private JPanel mainMenuPanel;
private JPanel cardSwitchPanel;
private MyTableModel tableModel;
private Font titleFont = new Font("Serif", Font.BOLD, 20);
private Font tableHeaderFont = new Font("Serif", Font.BOLD, 16);
private Font cellFont = new Font("Sans-Serif", Font.PLAIN, 14);
private DecimalFormat moneyFormat = new DecimalFormat("###,###,###,###.00");
private JButton mmAddButton, mmEditButton, mmSumButton;
public AccountManager(){
DefaultTableCellRenderer centerAlign;
DefaultTableCellRenderer rightAlign;
TableColumnAdjuster columnAdjuster;
Dimension d;
int tableHeight;
JLabel mmTitleLabel, mmTextLabel;
GridBagConstraints gc = new GridBagConstraints();
JLabel programTitleLabel;
/*
* TABLE PANEL
* displays a table of all saved accounts
*/
tableModel = new MyTableModel();
accountListTable = new JTable(tableModel);
tableScrollPane = new JScrollPane(accountListTable);
//Methods to modify properties of accountListTable object
accountListTable.setFocusable(false);
accountListTable.setShowGrid(false);
accountListTable.setFont(cellFont);
accountListTable.setRowHeight(20);
accountListTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//Determine the height of the table viewport
d = accountListTable.getPreferredSize();
tableHeight = accountListTable.getRowHeight() * 5;
accountListTable.setPreferredScrollableViewportSize(new Dimension(d.width, tableHeight));
accountListTable.setFillsViewportHeight(true);
//Methods to modify the properties of the TableHeader of accountListTable
accountListTable.getTableHeader().setResizingAllowed(false);
accountListTable.getTableHeader().setReorderingAllowed(false);
accountListTable.getTableHeader().setFont(tableHeaderFont);
//Use DefaultTableCellRenderer to center-align the name column
centerAlign = new DefaultTableCellRenderer();
centerAlign.setHorizontalAlignment(SwingConstants.CENTER);
accountListTable.getColumnModel().getColumn(0).setCellRenderer(centerAlign);
//Use DefaultTableCellRenderer to right-align the amount column
rightAlign = new DefaultTableCellRenderer();
rightAlign.setHorizontalAlignment(SwingConstants.RIGHT);
accountListTable.getColumnModel().getColumn(1).setCellRenderer(rightAlign);
//Adjust columns to fit data (uses TableColumnAdjuster class from Word Press post)
columnAdjuster = new TableColumnAdjuster(accountListTable);
columnAdjuster.adjustColumns();
/*
* MAIN MENU PANEL
* displays the Main Menu of the program
*/
mainMenuPanel = new JPanel();
mainMenuPanel.setLayout(new GridBagLayout());
mmTitleLabel = new JLabel("<html><u>MAIN MENU</u></html>", SwingConstants.CENTER);
mmTitleLabel.setFont(titleFont);
mmTextLabel = new JLabel("Choose from the following options.", SwingConstants.CENTER);
mmAddButton = new JButton("Add Account");
mmEditButton = new JButton("Edit Account");
mmSumButton = new JButton("Sum Accounts");
//FIRST ROW
gc.gridx = 0;
gc.gridy = 0;
gc.gridwidth = 3;
gc.insets = new Insets(10, 0, 10, 0);
mainMenuPanel.add(mmTitleLabel, gc);
//SECOND ROW
gc.gridy = 1;
gc.insets = new Insets(0, 0, 10, 0);
mainMenuPanel.add(mmTextLabel, gc);
//THIRD ROW
//Add Button
gc.gridx = 0;
gc.gridy = 2;
gc.gridwidth = 1;
gc.insets = new Insets(0, 10, 10, 10);
mainMenuPanel.add(mmAddButton, gc);
//Edit Button
gc.gridx = 1;
mainMenuPanel.add(mmEditButton, gc);
//Sum Button
gc.gridx = 2;
mainMenuPanel.add(mmSumButton, gc);
/*
* CARD SWITCH PANEL
* master panel attached to mainWindow
* all other panels added to it
*/
cardSwitchPanel = new JPanel();
cardSwitchPanel.setLayout(new BorderLayout());
//cardSwitchPanel.add(tableScrollPane, BorderLayout.CENTER);
cardSwitchPanel.add(mainMenuPanel, BorderLayout.CENTER);
/*
* MAIN WINDOW OF THE PROGRAM
*/
mainWindow = new JFrame("Account Manager");
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWindow.setLayout(new BorderLayout());
programTitleLabel = new JLabel("ACCOUNT MANAGER", SwingConstants.CENTER);
programTitleLabel.setFont(titleFont);
mainWindow.add(programTitleLabel, BorderLayout.NORTH);
mainWindow.add(tableScrollPane, BorderLayout.CENTER);
mainWindow.add(cardSwitchPanel, BorderLayout.SOUTH);
mainWindow.setVisible(true);
mainWindow.pack();
}
}