我正在尝试向我的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++;
}
}
答案 0 :(得分:4)
简短的回答是,因为在使用空布局时,您负责指定所有添加组件的确切位置和大小。
正确的答案是:这是您不应该使用null布局的另一个原因。周期。
使用null布局会使GUI非常不灵活,虽然它们在一个平台上看起来不错但在大多数其他平台或屏幕分辨率上看起来很糟糕,并且很难更新和维护。相反,您将需要学习和学习布局管理器,然后嵌套JPanels,每个JPanels都使用自己的布局管理器来创建令人满意的复杂GUI,这些GUI在所有操作系统上都很好看。
可以在此处找到布局管理器教程:Layout Manager Tutorial
修改强>
另请注意,您要将JTable添加到两个容器中,即JPanel和JScrollPane。不要这样做。只将它添加到JScrollPane,然后将scrollPane添加到您希望的任何位置。