Java JDialog 不显示 JTable

Java JDialog not displaying JTable

我有以下 JDialog class:

public class VHSInformationPanel extends JDialog {

    private static final long serialVersionUID = 1L;
    private JTable vhsTable;
    private String[][] data;
    private String[] columnNames;
    public VHSInformationPanel(String[][] data, String[] columnNames) {
        this.data = data;
        this.columnNames = columnNames;
        setLocationRelativeTo(null);
        setLayout(new FlowLayout());
        vhsTable = new JTable(data, columnNames);
        add(new JScrollPane(vhsTable,
                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED));
        setVisible(true);
    }
}

当 class 初始化时,JTable 的数据被正确传输,但是,当我按下以显示 JDialog 时,它显示一个空的 JDialog。为什么不包含 JTable?

初始化 JDialog 的代码是:

public void showVHSInformationPanel(String[][] data, String[] columnNames) {
  vhsInformationPanel = new VHSInformationPanel(data, columnNames);
  vhsInformationPanel.setVisible(true);
}

是否初始化错误?

好的,我对你的代码做了一些修改:

import java.awt.BorderLayout;

import javax.swing.JDialog;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class VHSInformationPanel extends JDialog {

    private static final long serialVersionUID = 1L;
    private JTable vhsTable;

    public VHSInformationPanel(String[][] data, String[] columnNames) {
        setLocationRelativeTo(null);
        setLayout(new BorderLayout());
        vhsTable = new JTable(data, columnNames);
        add(new JScrollPane(vhsTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED),
                BorderLayout.CENTER);
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        // setModalityType(ModalityType.APPLICATION_MODAL);
        pack();
        setVisible(true);
    }
}

我将 FlowLayout 更改为 BorderLayout,并在 JPanelCENTER 上添加了 JScrollPaneJTable。我还为关闭时处理的 JDialog 设置了正确的默认关闭操作。最后我调用了 pack,因此您的 JDialog 将根据 JTable 的首选大小调整其大小。或者,您可以设置模态类型。

初始化完全没有问题。 测试代码:

String[][] data = { { "bla", "bla" } };
String[] cols = { "col1", "col2" };
new VHSInformationPanel(data, cols);