Java 无法在GUI上显示JTable。。我错过了什么?

Java 无法在GUI上显示JTable。。我错过了什么?,java,swing,jtable,layout-manager,null-layout-manager,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.

我试图在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++;
    }
}

简而言之,这是因为在使用null布局时,您负责指定添加的所有组件的确切位置和大小

正确的答案是:这是不应该使用null布局的另一个原因。句号

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

布局管理器教程可在以下位置找到:


编辑

还要注意,您正在将JTable添加到两个容器中,一个是JPanel,一个是JScrollPane。不要这样做。只需将其添加到JScrollPane,然后将滚动窗格添加到您希望的任何位置。

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

正确的答案是:这是不应该使用null布局的另一个原因。句号

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

布局管理器教程可在以下位置找到:


编辑

还要注意,您正在将JTable添加到两个容器中,一个是JPanel,一个是JScrollPane。不要这样做。只将其添加到JScrollPane,然后将滚动窗格添加到任何您想要的位置。

欢迎使用Stack Overflow!不要使用
null
布局。像素完美布局在现代UI设计中是一种错觉,您无法控制字体、DPI、渲染管道或其他因素,这些因素将改变组件在屏幕上的渲染方式。Swing设计用于与布局管理器协作以克服这些问题。如果你坚持忽略这些特性,并且反对API设计,那么就要准备好面对很多麻烦和永无止境的艰苦工作……欢迎使用Stack Overflow!不要使用
null
布局。像素完美布局在现代UI设计中是一种错觉,您无法控制字体、DPI、渲染管道或其他因素,这些因素将改变组件在屏幕上的渲染方式。Swing设计用于与布局管理器协作以克服这些问题。如果你坚持忽略这些特性,反对API设计,那么就要准备好面对很多令人头痛的问题,并且永远不要停止艰苦的工作……这是错误的JScrollPane scrollPane=new JScrollPane(sEmpTable);salariedEmpTablePanel.add(sEmpTable);您应该将scrollPane添加到JPanel中。@MR1:正如我在“编辑以回答”中所述。这是错误的JScrollPane scrollPane=new JScrollPane(sEmpTable);salariedEmpTablePanel.add(sEmpTable);您应该将scrollPane添加到JPanel中。@MR1:如我的“编辑回答”中所述。