使用java布局定义容器最小大小

使用java布局定义容器最小大小,java,swing,layout,panel,minimum-size,Java,Swing,Layout,Panel,Minimum Size,我正在用java编写一个独立的应用程序,使用两个不同布局的JPanel来安排用户界面。 现在我的问题是,当我在窗口的上方(它是边框布局中的一个窗格,在另一个使用边框布局的面板中),我试图添加一个扩展面板的类,以便在窗口顶部绘制一个图标(在面板上绘制)。问题是布局正在切割图标的一部分,或者换句话说,将面板缩小到一定大小。 我试着改成flowlayout和其他的,但也是这样。。。 所以我想问,是否存在一个选项,告诉布局容器(面板或其他)不能设置为低于给定大小的大小?其他建议也会有所帮助,但请记住,我

我正在用java编写一个独立的应用程序,使用两个不同布局的JPanel来安排用户界面。 现在我的问题是,当我在窗口的上方(它是边框布局中的一个窗格,在另一个使用边框布局的面板中),我试图添加一个扩展面板的类,以便在窗口顶部绘制一个图标(在面板上绘制)。问题是布局正在切割图标的一部分,或者换句话说,将面板缩小到一定大小。 我试着改成flowlayout和其他的,但也是这样。。。 所以我想问,是否存在一个选项,告诉布局容器(面板或其他)不能设置为低于给定大小的大小?其他建议也会有所帮助,但请记住,我正试图在GUI中添加带有微小更改的图标

谢谢你的阅读和帮助
moshe

容器可以容纳JComponent的最小大小,简单的示例

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CustomComponent extends JFrame {

    private static final long serialVersionUID = 1L;

    public CustomComponent() {
        setTitle("Custom Component Graphics2D");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void display() {
        add(new CustomComponents());//
        pack();
        // enforces the minimum size of both frame and component
        setMinimumSize(getSize());
        setVisible(true);
    }

    public static void main(String[] args) {
        CustomComponent main = new CustomComponent();
        main.display();
    }
}

class CustomComponents extends JPanel {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(100, 100);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 300);
    }

    @Override
    public void paintComponent(Graphics g) {
        int margin = 10;
        Dimension dim = getSize();
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
    }
}

容器可以容纳JComponent的最小大小,简单示例

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CustomComponent extends JFrame {

    private static final long serialVersionUID = 1L;

    public CustomComponent() {
        setTitle("Custom Component Graphics2D");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void display() {
        add(new CustomComponents());//
        pack();
        // enforces the minimum size of both frame and component
        setMinimumSize(getSize());
        setVisible(true);
    }

    public static void main(String[] args) {
        CustomComponent main = new CustomComponent();
        main.display();
    }
}

class CustomComponents extends JPanel {

    private static final long serialVersionUID = 1L;

    @Override
    public Dimension getMinimumSize() {
        return new Dimension(100, 100);
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(400, 300);
    }

    @Override
    public void paintComponent(Graphics g) {
        int margin = 10;
        Dimension dim = getSize();
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(margin, margin, dim.width - margin * 2, dim.height - margin * 2);
    }
}

如果您的GUI有嵌套的JPanel,那么发布一个演示您发布的,有一些方法可以设置任何setXxxSize而不声明Container/JPanel/JComponents setXxxSize:-)如果您的GUI有嵌套的JPanel,那么发布一个演示您发布的,有一些方法可以设置任何setXxxSize而不为Container/JPanel/JComponents声明setXxxSize:-)