3

我有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);
    }
}

为什么面板的大小没有改变?

4

1 回答 1

4
  • BoxLayout接受Min/Max/preferredSize来自JComponents这个LayoutManager

  • (我不想评论什么,因为我的答案会很长)请把你的代码与这个代码示例进行比较,实现的都很好(必需且重要)Swing rulles

例如

import java.awt.ComponentOrientation;
import java.awt.Dimension;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.border.TitledBorder;

public class ActionForm {

    private static final long serialVersionUID = 1L;
    private JFrame frame;
    private JPanel namePanel;
    private JLabel nameLabel;
    private JTextField nameTextField;
    private FlowLayout toolBarLayout = new FlowLayout();

    public ActionForm() {
        TitledBorder nameBorder = BorderFactory.createTitledBorder(
            "Change Description");
        nameBorder.setTitleJustification(TitledBorder.LEFT);
        namePanel = new JPanel(toolBarLayout);
        namePanel.setPreferredSize(new Dimension(150, 150));// hardCoded sizing
        namePanel.setMaximumSize(new Dimension(250, 150));  // hardCoded sizing
        namePanel.setMinimumSize(new Dimension(150, 150));  // hardCoded sizing
        nameLabel = new JLabel("ButtonName");
        nameTextField = new JTextField("Action's Name", 10);
        namePanel.add(nameLabel);
        namePanel.add(nameTextField);
        namePanel.setBorder(nameBorder);
        namePanel.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
        frame = new JFrame("Mix / Max / PreferredSize for BoxLayout");
        frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(),
            BoxLayout.Y_AXIS)); // otherwise nice exceptions java.awt.AWTError:
                                // BoxLayout can't be shared
        frame.add(namePanel);
        frame.setPreferredSize(new Dimension(970, 500));
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                ActionForm form = new ActionForm();
            }
        });
    }
}
于 2013-02-02T01:14:04.490 回答