Swing组件 - 禁用布局中的调整大小

时间:2011-06-27 12:23:24

标签: java swing user-interface layout resize

我有一个自定义GUI组件,它基于Swing的JPanel。此组件放置在使用BorderLayout的JFrame中。当我调整框架大小时,此组件会继续调整大小。我怎么能避免这个?无论发生什么,我都希望组件保持相同的大小。我已经尝试过setSize,setPreferredSize,setMinimumSize但没有成功。

提前致谢!

中号

3 个答案:

答案 0 :(得分:6)

您有几个选择:

  • 将组件嵌套在内部面板中,其中LayoutManager 调整组件大小

  • 使用比BorderLayout更复杂的LayoutManager。在我看来,GridBagLayout更符合您的需求。

第一个解决方案的示例:

import java.awt.*;
import javax.swing.*;

public class FrameTestBase extends JFrame {

    public static void main(String args[]) {
        FrameTestBase t = new FrameTestBase();

        JPanel mainPanel = new JPanel(new BorderLayout());

        // Create some component
        JLabel l = new JLabel("hello world");
        l.setOpaque(true);
        l.setBackground(Color.RED);

        JPanel extraPanel = new JPanel(new FlowLayout());
        l.setPreferredSize(new Dimension(100, 100));
        extraPanel.setBackground(Color.GREEN);

        // Instead of adding l to the mainPanel (BorderLayout),
        // add it to the extra panel
        extraPanel.add(l);

        // Now add the extra panel instead of l
        mainPanel.add(extraPanel, BorderLayout.CENTER);

        t.setContentPane(mainPanel);

        t.setDefaultCloseOperation(EXIT_ON_CLOSE);
        t.setSize(400, 200);
        t.setVisible(true);
    }
}

<强>结果:

enter image description here

绿色组件放在BorderLayout.CENTER中,红色组件保持首选尺寸。

答案 1 :(得分:0)

//this will restrict size on fix size, what ever size you will define for panel like
//panel.setSize(400,400);


    panel.setMaximumSize(panel.getSize());
    panel..setMinimumSize(panel.getSize());

答案 2 :(得分:0)

如果您使用自定义布局管理器,请将当前布局更改为GridBagLayout并将填充选项更改为,之后将其更改回第一个布局。