Java:将JFrame扩展为JTable的宽度

时间:2015-03-26 22:02:23

标签: java jtable jframe

所以我现在正在玩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();
    }
}

0 个答案:

没有答案