ICode9

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

java-根据其中的组件调整jpanel的大小

2019-11-21 23:01:21  阅读:308  来源: 互联网

标签:layout swing jpanel java


在下面的示例中,在边框布局的西侧,有一个父面板,其中具有BoxLayout和内部几个面板.问题在于西面板从上到下覆盖了整个区域.用于父面板内的子面板的FlowLayout占用大量区域.是否可以根据组件压缩每个JPanel?另外,即使窗口最大化也应该保持不变?

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.BoxLayout;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.JButton;

public class Sample extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    private JTextField textField_1;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Sample frame = new Sample();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Sample() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.NORTH);

        JLabel lblNewLabel = new JLabel("New label");
        panel.add(lblNewLabel);

        JPanel panel_1 = new JPanel();
        contentPane.add(panel_1, BorderLayout.WEST);
        panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.Y_AXIS));

        JPanel panel_2 = new JPanel();
        panel_1.add(panel_2);

        textField = new JTextField();
        panel_2.add(textField);
        textField.setColumns(2);

        textField_1 = new JTextField();
        panel_2.add(textField_1);
        textField_1.setColumns(2);

        JPanel panel_3 = new JPanel();
        panel_1.add(panel_3);

        JCheckBox chckbxNewCheckBox = new JCheckBox("New check box");
        panel_3.add(chckbxNewCheckBox);

        JPanel panel_4 = new JPanel();
        panel_1.add(panel_4);

        JButton btnNewButton = new JButton("New");
        panel_4.add(btnNewButton);

        JButton btnNewButton_1 = new JButton("New");
        panel_4.add(btnNewButton_1);
    }

}

解决方法:

一种方法是将panel_1添加到封闭的面板中.当您包装()封闭的Window时,默认的FlowLayout使其符合封闭组件的首选大小.我在CENTER中添加了一个灰色面板作为占位符;调整框架大小以查看效果.

JPanel flowPanel = new JPanel();
flowPanel.add(panel_1);

经测试:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.BoxLayout;
import javax.swing.JTextField;
import javax.swing.JCheckBox;
import javax.swing.JButton;

public class Sample extends JFrame {

    private JPanel contentPane;
    private JTextField textField;
    private JTextField textField_1;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    Sample frame = new Sample();
                    frame.pack();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Sample() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.NORTH);

        JLabel lblNewLabel = new JLabel("New label");
        panel.add(lblNewLabel);

        JPanel panel_1 = new JPanel();
        panel_1.setLayout(new BoxLayout(panel_1, BoxLayout.Y_AXIS));

        JPanel panel_2 = new JPanel();
        panel_1.add(panel_2);

        textField = new JTextField();
        panel_2.add(textField);
        textField.setColumns(2);

        textField_1 = new JTextField();
        panel_2.add(textField_1);
        textField_1.setColumns(2);

        JPanel panel_3 = new JPanel();
        panel_1.add(panel_3);

        JCheckBox chckbxNewCheckBox = new JCheckBox("New check box");
        panel_3.add(chckbxNewCheckBox);

        JPanel panel_4 = new JPanel();
        panel_1.add(panel_4);

        JButton btnNewButton = new JButton("New");
        panel_4.add(btnNewButton);

        JButton btnNewButton_1 = new JButton("New");
        panel_4.add(btnNewButton_1);

        JPanel flowPanel = new JPanel();
        flowPanel.add(panel_1);
        contentPane.add(flowPanel, BorderLayout.WEST);
        contentPane.add(new JPanel(){

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(320, 240);
            }

            @Override
            public Color getBackground() {
                return Color.lightGray;
            }

        }, BorderLayout.CENTER);
    }

}

标签:layout,swing,jpanel,java
来源: https://codeday.me/bug/20191121/2055458.html

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

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

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

ICode9版权所有