簡體   English   中英

明確地在JFrame上設置jpanel的大小

[英]Set size of jpanel on a JFrame explicitly

我有帶邊框的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);
    }
}

為什么面板的大小不會改變?

  • BoxLayout接受來自JComponents Min/Max/preferredSize ,由此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();
            }
        });
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM