0

我正在尝试向我的 GUI 添加一个表,但是当我将框架的布局从 GridLayout 更改为 NULL 时,它会从 GUI 中丢失吗?

以下代码用于创建 GUI:

    public SalariedEmployeeGUI() {

    setLayout(null);
    getContentPane().setBackground(Color.WHITE);


    JPanel salariedEmpTablePanel = new JPanel();
    salariedEmpTablePanel.setLayout(null);
    salariedEmpTablePanel.setLocation(60,110);
    salariedEmpTablePanel.setSize(550,390);
    salariedEmpTablePanel.setBorder(BorderFactory.createTitledBorder(
            BorderFactory.createEtchedBorder(EtchedBorder.RAISED, 
                    Color.BLUE, Color.DARK_GRAY), "Salaried Employee Table"));
    salariedEmpTablePanel.setBackground(Color.WHITE);

    sEmpTable = new JTable();
    sEmpTable.setPreferredScrollableViewportSize(new Dimension(550, 390));
    JScrollPane scrollPane = new JScrollPane(sEmpTable);
    salariedEmpTablePanel.add(sEmpTable);


    add(salariedEmpTablePanel);
    setupTable();
    loadTable();

setupTable 和 loadTable 方法如下.. 但我认为它们工作正常:

    private void setupTable() {
    payrollQueries = new PayrollQueries();
    tableModel = new DefaultTableModel();
    tableModel.setColumnCount(5);
    tableModel.setColumnIdentifiers(new String[]{"First Name",
        "Last Name", "Type", "SSN", "Weekly Salary"});
    sEmpTable.setModel(tableModel);
}

private void loadTable() {
    entries = payrollQueries.getSalariedEmployee();
    int tableRow = 0;
    tableModel.setNumRows(entries.size());

    System.out.println("number of salaries employees: " + entries.size());

    for (SalariedEmployee se : entries) {
        tableModel.setValueAt(se.getFirstName(), tableRow, 0);
        tableModel.setValueAt(se.getLastName(), tableRow, 1);
        tableModel.setValueAt(se.getSocialSecurityNumber(), tableRow, 2);
        tableModel.setValueAt(se.geteType(), tableRow, 3);
        tableModel.setValueAt(se.getWeeklySalary(), tableRow, 4);
        tableRow++;
    }
}
4

1 回答 1

4

简短的回答是,这是因为在使用空布局时,您有责任指定添加的所有组件的确切位置和大小。

正确答案是:这是您不应该使用空布局的另一个原因。时期。

使用空布局会导致非常不灵活的 GUI,虽然它们在一个平台上看起来不错,但在大多数其他平台或屏幕分辨率上看起来很糟糕,并且很难更新和维护。相反,您需要学习和学习布局管理器,然后嵌套 JPanel,每个 JPanel 都使用自己的布局管理器来创建在所有操作系统上看起来都不错的令人愉悦且复杂的 GUI。

布局管理器教程可以在这里找到:布局管理器教程


编辑
另请注意,您将 JTable 添加到两个容器中,一个 JPanel 和一个 JScrollPane。不要这样做。只需将其添加到 JScrollPane,然后将 scrollPane 添加到您希望的任何位置。

于 2014-06-03T02:07:23.247 回答