Java JFrame未调整大小以适合JPanel
我已经为一个项目模拟了一个快速GUI,我可以看到标签和文本字段,但是由于某些原因,窗口的大小没有调整到它所包含的大小 以下是基本情况: 创建JFrame并添加JPanel:Java JFrame未调整大小以适合JPanel,java,swing,layout-manager,gridbaglayout,Java,Swing,Layout Manager,Gridbaglayout,我已经为一个项目模拟了一个快速GUI,我可以看到标签和文本字段,但是由于某些原因,窗口的大小没有调整到它所包含的大小 以下是基本情况: 创建JFrame并添加JPanel: JFrame frame1 = new JFrame("Hotel Reservation App"); frame1.getContentPane().add(rViewPan, BorderLayout.CENTER); frame1.setDefaultCloseOperation(WindowCon
JFrame frame1 = new JFrame("Hotel Reservation App");
frame1.getContentPane().add(rViewPan, BorderLayout.CENTER);
frame1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame1.pack();
frame1.setVisible(true);
这是rViewPan的JPanel代码:
private void initComponents() {
setLayout(new BorderLayout());
arrivalDateTF = new JTextField();
departureDateTF = new JTextField();
roomCategoryTF = new JTextField();
roomQtyTF = new JTextField();
JTextField[] textFields = { arrivalDateTF, departureDateTF, roomCategoryTF, roomQtyTF };
JLabel[] textLabels = { new JLabel("1 : "), new JLabel("2 : "),
new JLabel("3 : "), new JLabel("4 : ")
};
JPanel displayPan = new JPanel();
GridBagLayout gridBagLay = new GridBagLayout();
GridBagConstraints gridBagC = new GridBagConstraints();
displayPan.setLayout(gridBagLay);
SwingUtilities.addTextElementsAsRows(textLabels, textFields, gridBagLay, displayPan);
gridBagC.gridwidth = GridBagConstraints.REMAINDER;
gridBagC.anchor = GridBagConstraints.EAST;
gridBagC.weightx = 1.0;
displayPan.add(new JLabel(" "), gridBagC);
submitB = new JButton("Soumettre");
displayPan.add(submitB, gridBagC);
SwingUtilities.addStdBorder(displayPan, "Reservation");
add(displayPan, BorderLayout.CENTER);
}
我基本上得到了一个大小合适的窗口,但字段是水平隐藏的
..此窗口的大小未调整为包含的大小
这个变体是
如果您不知道如何使GUI正常工作,我建议您制作并发布一个SSCCE
import java.awt.*;
import javax.swing.*;
// TODO don't extend JPanel, just create an instance
class TestGui extends JPanel {
JTextField arrivalDateTF;
JTextField departureDateTF;
JTextField roomCategoryTF;
JTextField roomQtyTF;
JButton submitB;
TestGui() {
initComponents();
}
private void initComponents() {
setLayout(new BorderLayout());
arrivalDateTF = new JTextField(6);
departureDateTF = new JTextField(6);
roomCategoryTF = new JTextField(8);
roomQtyTF = new JTextField(2);
JTextField[] textFields = { arrivalDateTF, departureDateTF, roomCategoryTF, roomQtyTF };
JLabel[] textLabels = { new JLabel("1 : "), new JLabel("2 : "),
new JLabel("3 : "), new JLabel("4 : ")
};
JPanel displayPan = new JPanel();
GridBagLayout gridBagLay = new GridBagLayout();
GridBagConstraints gridBagC = new GridBagConstraints();
displayPan.setLayout(gridBagLay);
// SwingUtilities.addTextElementsAsRows(textLabels, textFields, gridBagLay, displayPan);
for (int ii=0; ii<textFields.length; ii++) {
displayPan.add( textLabels[ii] );
displayPan.add( textFields[ii] );
}
gridBagC.gridwidth = GridBagConstraints.REMAINDER;
gridBagC.anchor = GridBagConstraints.EAST;
gridBagC.weightx = 1.0;
displayPan.add(new JLabel(" "), gridBagC);
submitB = new JButton("Soumettre");
displayPan.add(submitB, gridBagC);
// SwingUtilities.addStdBorder(displayPan, "Reservation");
add(displayPan, BorderLayout.CENTER);
}
public static void main(String[] args){
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame1 = new JFrame("Hotel Reservation App");
frame1.getContentPane().add(new TestGui(), BorderLayout.CENTER);
frame1.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame1.pack();
frame1.setVisible(true);
}
});
}
}
import java.awt.*;
导入javax.swing.*;
//TODO不扩展JPanel,只创建一个实例
类TestGui扩展了JPanel{
JTextField-arrivalDateTF;
JTextField departureDateTF;
JTextField房间类别f;
JTextField-roomQtyTF;
JButton-submitB;
TestGui(){
初始化组件();
}
私有组件(){
setLayout(新的BorderLayout());
arrivalDateTF=新的JTextField(6);
departureDateTF=新的JTextField(6);
roomCategoryTF=新的JTextField(8);
roomQtyTF=新的JTextField(2);
JTextField[]textFields={arrivalDateTF,departureDateTF,roomCategoryTF,roomQtyTF};
JLabel[]textLabels={new JLabel(“1:”),new JLabel(“2:”),
新JLabel(“3:”),新JLabel(“4:”)
};
JPanel displayPan=新的JPanel();
GridBagLayout gridBagLay=新的GridBagLayout();
GridBagConstraints gridBagC=新的GridBagConstraints();
displayPan.setLayout(gridBagLay);
//添加TextElementsRows(文本标签、文本字段、gridBagLay、displayPan);
for(int ii=0;ii)为了更快地获得更好的帮助,请发布一条消息。感谢Andrew,我已设法使其正常工作。出于某种原因,我有一个私人重新定义的setPreferredSize版本,它没有任何作用,因此调用毫无意义。在向主BorderLayout的其他部分添加更多内容后,它开始正常工作。“我有一个私人重新定义的setPreferredSize版本”,如果您选择发布它,它会出现在SSCCE中很高兴你把它整理好了。我现在能提供的最好建议是,如果你认为你需要调用或覆盖组件的首选大小,请先来寻求帮助。:@Andrew Thompson你知道定制os SwingUtilities 2是从哪里来的,意思是代码行SwingUtilities。addTextElementsAsRows@mKorbel我猜我t是一个命名不好的自定义实用程序类。但是,除了看到一个..我甚至需要完成该语句吗?;)之外,这是我能做的最好的转换