我有一个带边框的JPanel
,问题是当我将面板添加到JFrame
上时,尽管我使用setPreferredSize
设置了面板的首选大小,但它仍会采用面板的大小。框架的布局是'BoxLayout',以下是代码:
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)
将导致它自适应大小,给出其子组件首选大小的恰当大小。 - bobby_light