ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-在JFrame上显式设置jpanel的大小

2019-10-31 08:59:58  阅读:242  来源: 互联网

标签:swing jpanel preferredsize layout-manager java


我有带边框的JPanel,问题是,尽管我使用setPreferredSize设置了面板的首选大小,但是当我在JFrame上添加面板时,它会占用面板大小.框架的布局为“ 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接受由此LayoutManager放置的JComponents的Min / Max / preferredSize
>(我不想发表评论,因为我的回答会很长)请将您的代码与此代码示例进行比较,其中实现了所有好的(必需的和重要的)Swing规则

例如

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();
            }
        });
    }
}

标签:swing,jpanel,preferredsize,layout-manager,java
来源: https://codeday.me/bug/20191031/1974762.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有