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
,并在 JPanel
的 CENTER
上添加了 JScrollPane
和 JTable
。我还为关闭时处理的 JDialog
设置了正确的默认关闭操作。最后我调用了 pack
,因此您的 JDialog
将根据 JTable
的首选大小调整其大小。或者,您可以设置模态类型。
初始化完全没有问题。
测试代码:
String[][] data = { { "bla", "bla" } };
String[] cols = { "col1", "col2" };
new VHSInformationPanel(data, cols);
我有以下 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
,并在 JPanel
的 CENTER
上添加了 JScrollPane
和 JTable
。我还为关闭时处理的 JDialog
设置了正确的默认关闭操作。最后我调用了 pack
,因此您的 JDialog
将根据 JTable
的首选大小调整其大小。或者,您可以设置模态类型。
初始化完全没有问题。 测试代码:
String[][] data = { { "bla", "bla" } };
String[] cols = { "col1", "col2" };
new VHSInformationPanel(data, cols);