我有JPanel
带有边框,问题是当我在JFrame
上添加面板时,需要面板大小,但我使用setPreferredSize
来设置面板的首选大小。该框架的布局是'BoxLayout',这里是代码:在JFrame上显式设置jpanel的大小
public class ActionForm extends JFrame {
JPanel namePanel;
JPanel descPanel;
JLabel actionName;
JLabel nameLabel;
JTextField nameTextField, descTextField;
FlowLayout toolBarLayout = new FlowLayout();
public ActionForm() {
this.setLayout(new BoxLayout(this.getContentPane(), BoxLayout.Y_AXIS));
TitledBorder nameBorder= BorderFactory.createTitledBorder(
"Change Description");
nameBorder.setTitleJustification(TitledBorder.LEFT);
namePanel = new JPanel(toolBarLayout);
namePanel.setPreferredSize(new Dimension(150, 150));
nameLabel = new JLabel("ButtonName");
nameTextField = new JTextField("Action's Name", 50);
namePanel.add(nameLabel);
namePanel.add(nameTextField);
namePanel.setBorder(nameBorder);
namePanel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
this.add(namePanel);
}
public static void main(String[] args) {
ActionForm form = new ActionForm();
form.setVisible(true);
form.setSize(970, 500);
form.setResizable(false);
}
}
为什么面板的大小没有改变?
你问为什么不setPreferredSize()似乎做任何事情?如果是这样,这是因为它的孩子的首选大小是对JFrame的一个建议,但是你明确地给它一个大小,所以它忽略了这个建议。调用frame.pack()而不是frame.setSize(w,h)将使它适当调整自身的大小,为其子的首选大小提供恰当的大小。 –