我有一个基于Swing的JPanel的自定义GUI组件。该组件放置在使用BorderLayout的JFrame中。当我调整框架大小时,此组件会不断调整大小。如何避免这种情况?无论发生什么情况,我都希望组件保持相同的大小。我尝试了setSize,setPreferredSize,setMinimumSize,但均未成功。

提前致谢!

中号

最佳答案

您有几种选择:

  • 使用不更改组件大小的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);
        }
    }
    

    结果:

    绿色组件放置在BorderLayout.CENTER中,红色组件保持首选大小。

    10-07 16:33
    查看更多