JPanel не соблюдает setMinimumSize / ComponentListener - PullRequest
0 голосов
/ 19 марта 2019

У меня есть 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 Ответ

1 голос
/ 19 марта 2019

BorderLayout не учитывает любые из этих подсказок по размеру для компонентов, помещенных в ЦЕНТР.

Для разных границ это зависит от того, какой размер вы устанавливаете. СЕВЕР и ЮГ соблюдают предпочтительную высоту (но игнорируют ширину). ЗАПАД и ВОСТОК учитывают предпочтительную ширину и игнорируют высоту. Подсказки других размеров игнорируются.

РЕДАКТИРОВАТЬ: Проверьте этот сайт, на нем есть хорошая таблица с описанием того, что разные менеджеры по раскладке делают с этими подсказками. https://thebadprogrammer.com/swing-layout-manager-sizing/

Я пытался найти его в javadocs, но не смог найти эту информацию, собранную в одном месте.

...