【问题标题】:Cant get JTable to appear on GUI.. what am I missing? [duplicate]无法让 JTable 出现在 GUI 上。我错过了什么? [复制]
【发布时间】:2024-01-05 19:55:01
【问题描述】:

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

【问题讨论】:

  • 欢迎来到 Stack Overflow!不要使用null 布局。像素完美布局是现代 UI 设计中的一种错觉,您无法控制字体、DPI、渲染管道或其他会改变组件在屏幕上渲染方式的因素。 Swing 旨在与布局管理器一起克服这些问题。如果您坚持忽略这些功能并违背 API 设计,请准备好迎接许多令人头疼的问题和永无止境的辛勤工作......

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


【解决方案1】:

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

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

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

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


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

【讨论】:

  • 错了 JScrollPane scrollPane = new JScrollPane(sEmpTable); salariedEmpTablePanel.add(sEmpTable);您应该将 scrollPane 添加到 JPanel。
  • @MR1:正如我在回答的编辑中指出的那样。
最近更新 更多