Запретить пользователям изменять размер JFrame: методы и примеры кода

При разработке графического пользовательского интерфейса (GUI) JFrame — это широко используемый класс Java Swing для создания окон. По умолчанию пользователи могут изменять размер JFrame, но в некоторых случаях вы можете ограничить это поведение. В этой статье мы рассмотрим различные методы, позволяющие запретить пользователям изменять размер JFrame, а также приведем примеры кода.

Метод 1: JFrame.setResizable(false)
Самый простой способ предотвратить изменение размера JFrame — вызвать метод setResizable(false)для объекта JFrame. Этот метод отключает функцию изменения размера, и размер кадра останется фиксированным.

Пример кода:

import javax.swing.JFrame;
public class NoResizeFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("No Resize Frame");
        frame.setSize(500, 300);
        frame.setResizable(false);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Метод 2: JFrame.setUndecorated(true)
Другой подход — удалить украшения фрейма, такие как строка заголовка и элементы управления окном, путем вызова метода setUndecorated(true). Это фактически отключает изменение размера, поскольку стандартные маркеры изменения размера больше не видны.

Пример кода:

import javax.swing.JFrame;
public class NoResizeFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("No Resize Frame");
        frame.setSize(500, 300);
        frame.setUndecorated(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

Метод 3: пользовательский прослушиватель компонентов
Вы также можете реализовать собственный ComponentListenerдля обработки событий изменения размера и обеспечения фиксированного размера для JFrame. Переопределив метод componentResized(), вы можете установить желаемый размер при каждом возникновении события изменения размера.

Пример кода:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
public class NoResizeFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("No Resize Frame");
        frame.setSize(500, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.addComponentListener(new ComponentAdapter() {
            @Override
            public void componentResized(ComponentEvent e) {
                frame.setSize(500, 300);
            }
        });
        frame.setVisible(true);
    }
}

Метод 4: Менеджер пользовательского макета
Использование специального менеджера макета также может помочь предотвратить изменение размера кадра. Внедрив менеджер макета, который обеспечивает определенный размер панели содержимого JFrame, вы можете эффективно предотвратить изменение размера.

Пример кода:

import javax.swing.*;
import java.awt.*;
public class NoResizeFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("No Resize Frame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FixedLayoutManager());
        frame.add(new JLabel("This frame cannot be resized."));
        frame.setSize(500, 300);
        frame.setVisible(true);
    }
}
class FixedLayoutManager implements LayoutManager {
    @Override
    public void addLayoutComponent(String name, Component comp) {
    }
    @Override
    public void removeLayoutComponent(Component comp) {
    }
    @Override
    public Dimension preferredLayoutSize(Container parent) {
        return new Dimension(500, 300);
    }
    @Override
    public Dimension minimumLayoutSize(Container parent) {
        return new Dimension(500, 300);
    }
    @Override
    public void layoutContainer(Container parent) {
        parent.getComponent(0).setBounds(0, 0, 500, 300);
    }
}

В этой статье мы рассмотрели несколько методов, позволяющих запретить пользователям изменять размер JFrame в Java Swing. Вы можете использовать метод setResizable(false), удалить оформление рамок с помощью setUndecorated(true), реализовать собственный ComponentListenerили использовать собственный менеджер макетов. Применяя эти методы, вы можете гарантировать, что ваш JFrame останется фиксированным по размеру, обеспечивая лучшее взаимодействие с пользователем.