Swing Component - отключение изменения размера в макете - PullRequest
5 голосов
/ 27 июня 2011

У меня есть собственный графический интерфейс пользователя, основанный на JPanel Swing.Этот компонент помещается в JFrame, который использует BorderLayout.Когда я изменяю размер кадра, этот компонент продолжает изменять размер.Как я могу избежать этого?Я хотел бы, чтобы компонент сохранял тот же размер, что бы ни случилось.Я пробовал setSize, setPreferredSize, setMinimumSize безуспешно.

Заранее спасибо!

M

Ответы [ 3 ]

6 голосов
/ 27 июня 2011

У вас есть несколько вариантов:

  • Вкладывает компонент во внутреннюю панель с LayoutManager, который не изменяет размер компонента

  • Используйте более сложный LayoutManager, чем BorderLayout. Мне кажется, что 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, красный компонент сохраняет предпочтительный размер.

0 голосов
/ 23 ноября 2016

, если вы используете собственный менеджер макетов, измените свой текущий макет на GridBagLayout и измените параметры заливки на НЕТ , после этого измените его на свой первый макет.

0 голосов
/ 27 июня 2011
//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());
...