JPanel不遵守setMinimumSize / ComponentListener

时间:2019-03-19 19:15:13

标签: java swing jpanel

我有一个JPanel,不应将其减小到小于最小大小的大小,但是它没有这样做。我知道我应该使用已实现但仍无用的ComponentListener。

有人可以以编程方式解释出了什么问题吗?

这是代码的相关部分:

public class ResearchdbView extends JFrame {
    private javax.swing.JMenuBar menuBar;

private ResearchdbView() {
    initComponents();
}

private void initComponents() {     
    mainPanel = new javax.swing.JPanel();
    mainPanel.setSize(new java.awt.Dimension(880, 700));
    mainPanel.setMaximumSize(null);
    mainPanel.setMinimumSize(new java.awt.Dimension(880, 700));
    mainPanel.setPreferredSize(new java.awt.Dimension(880, 700));
    setResizable(true);
    mainPanel.addComponentListener(new java.awt.event.ComponentAdapter() {
        public void componentResized(ComponentEvent ce) {
            mainPanel.setSize((Math.max(880, mainPanel.getWidth())), Math.max(700, mainPanel.getHeight()));
        }
    });

    this.getContentPane().add(mainPanel, BorderLayout.CENTER);      
}}

PS。我已经尝试过类似帖子提供的所有解决方案。

1 个答案:

答案 0 :(得分:1)

BorderLayout不考虑放置在CENTER中的组件的任何尺寸提示。

对于不同的边框,这取决于您设置的大小。 NORTH和SOUTH尊重首选高度(但忽略宽度)。 WEST和EAST尊重首选宽度,忽略高度。其他尺寸提示将被忽略。

编辑:请访问此站点,它有一张漂亮的表格,概述了不同的布局管理器对这些提示的处理方式。 https://thebadprogrammer.com/swing-layout-manager-sizing/

我试图在javadocs中找到一个,但是找不到聚合在单个空格中的信息。