java - 无法让 JTable 出现在 GUI 上..我错过了什么?

标签 java swing jtable layout-manager null-layout-manager

我正在尝试向 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++;
    }
}

最佳答案

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

正确答案是:这是不应使用空布局的又一个原因。期间。

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

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

<小时/>

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

关于java - 无法让 JTable 出现在 GUI 上..我错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24006030/

相关文章:

java - 在哪里可以找到 CPLEX 库(不是 AIMMS 的 GUI)?

java - 如何等待 GUI 的输入返回到主程序?

java - JTable 通过输入第一个单元格值加载行

java - JTable Oracle Timestamp 列不显示

Java 第一次使用按键绑定(bind),按键绑定(bind)事件未在 JPanel 上注册

java - JTable 行编辑器

java - 在 AWS Lambda 函数上创建 Parquet 文件

java - Spring @Component 在 @PostConstruct 完成之前可用

java - 使用 Wro4j 缩小 Angular2 时出现的问题

java - 结束球的路径