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

时间:2011-11-22 07:36:15

标签: java swing layout panel minimum-size

我正在使用一些具有不同布局的JPanel在java中编写一个独立的应用程序,以便安排用户界面。 现在我的问题是,当我采取窗口的上侧(它的边框布局中的一个面板,使用边框布局的另一个面板内),即时添加一个扩展面板的类是为了在上面绘制一个图标我的窗口顶部(在面板上绘制)。问题是布局是切割图标的一部分,换句话说,将面板缩小到一定的大小。 我尝试改为flowlayout和其他人但是做同样的事情...... 所以我想询问是否有一个选项告诉布局容器(面板或其他)不能设置为低于给定大小的尺寸?其他建议也会有所帮助,但请记住,我要将最小化的图标添加到GUI中。

感谢您阅读本文并提供帮助 尔摩西

1 个答案:

答案 0 :(得分:1)

容器可以为JComponent保留MinimumSize,简单示例

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