在附件的截图中,我有一个JLabel
,JTextField
和一个包装在JSchrollPane
中的JTabel
.首先,JLabel
和JTextField
在中间漂浮得太远了.上面有很大的空间.我想关闭那个空间.其次,我想让JTable/JSchrollPane
填满整个宽度.它只占宽度的一半.并且它不会显示该表包含的3行.
如果我这样做,而不是panFindStudent.add(table, gbcFindStud);
行显示,但它仍然看起来不漂亮.我想使用JSchrollPane
,这样,如果表包含许多行/列,则可以执行Schroll
我还try 将JLabel
和JTexField
包装在JPanel
中,并将JSchrollPane
包装在另一个JPanel
中,然后将这2个JPanels
分别添加到JFrame
中,如下所示
findStudentFrame.add(panelWithLabelAndTextField)
findStudentFrame.add(paneLWithShcrollPane)
但这样做,似乎只添加了最后一个面板,而不是第一个
我最终也认为GridBagLayout
可能不是这项任务的正确 Select ,我try 了GridBagLayout
和FlowLayout
的混合.它给出了更好的结果,但仍然不令人满意.但我认为最好是学会用GridBagLayout
来解决这个问题,这样我才能学会正确地使用它.欢迎你提出建议,让我的结果/看起来更好.我已经在底部添加了我的整个代码,所以您可以运行和更改它.谢谢
I want something similaar to this
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Toolkit;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
public class SwingPractice2 {
private JFrame findStudentFrame;
private JPanel panFindStudent, panTableResults;
private JLabel labelAddStudEmail;
private JTextField tFieldAddStudFirstName;
private int textFieldWidth = 20,
textFieldHeight = 10;
private Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
private int frameWidth = screenSize.width/4,
frameHeight = screenSize.height/3;
public SwingPractice2() {
findStudentFrame = new JFrame();
//findStudentFrame.setLayout(new GridLayout(2, 1));
//findStudentFrame.setSize(frameWidth, frameHeight);
//addStudentFrame.setSize(frameWidth, frameHeight);
panFindStudent = new JPanel(new GridBagLayout());
panFindStudent.setPreferredSize(new Dimension(frameWidth, frameHeight));
panFindStudent.setBorder(BorderFactory.createTitledBorder("Students"));
labelAddStudEmail = new JLabel("Email");
tFieldAddStudFirstName = new JTextField();
tFieldAddStudFirstName.setSize(textFieldWidth, textFieldHeight);
panTableResults = new JPanel(new FlowLayout());
}
public void showStudentGUI() {
GridBagConstraints gbcFindStud = new GridBagConstraints();
gbcFindStud.anchor = GridBagConstraints.NORTHWEST;
gbcFindStud.gridx = 0;
gbcFindStud.gridy = 0;
gbcFindStud.weightx = 1.0;
gbcFindStud.fill = GridBagConstraints.HORIZONTAL;
gbcFindStud.insets = new Insets(5, 5, 5, 5);
panFindStudent.add(labelAddStudEmail, gbcFindStud);
gbcFindStud.gridx++;
gbcFindStud.anchor = GridBagConstraints.NORTHEAST;
panFindStudent.add(tFieldAddStudFirstName, gbcFindStud);
String[] tableCols = new String[] {
"ID", "First name", "Last name"
};
String data[][] = {
{"1", "Marcus", "Johnson" },
{"2", "Miko", "Jameson"},
{"2", "Kate", "Anderson"}
};
JTable table = new JTable(data, tableCols);
//table.setBounds(30, 40, 200, 300);
JScrollPane jsp = new JScrollPane(table);
//jsp.setBounds(30, 40, 300, 300);
gbcFindStud.gridx = 0;
gbcFindStud.gridy = 1;
gbcFindStud.fill = GridBagConstraints.HORIZONTAL;
gbcFindStud.anchor = GridBagConstraints.CENTER;
panFindStudent.add(jsp, gbcFindStud);
findStudentFrame.add(panFindStudent);
//findStudentFrame.add(jsp);
findStudentFrame.pack();
findStudentFrame.setVisible(true);
}
public static void main(String[] args) {
new SwingPractice2().showStudentGUI();
}
}