Как центрировать открытый JFrame на экране: удобное руководство с примерами кода

Вы разрабатываете приложение Java Swing и задаетесь вопросом, как открыть окно JFrame в центре экрана? Не смотрите дальше! В этой статье мы рассмотрим несколько методов выполнения этой задачи, дополненные разговорными объяснениями и примерами кода, которые помогут вам быстро центрировать ваши JFrames как профессионал.

Метод 1: использование инструментария и классов измерений
Давайте начнем с простого подхода, используя классы java.awt.Toolkitи java.awt.Dimension. Вот код:

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class CenteredJFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Centered JFrame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int screenWidth = screenSize.width;
        int screenHeight = screenSize.height;

        int frameWidth = 400; // Set your desired frame width
        int frameHeight = 300; // Set your desired frame height

        int x = (screenWidth - frameWidth) / 2;
        int y = (screenHeight - frameHeight) / 2;

        frame.setBounds(x, y, frameWidth, frameHeight);
        frame.setVisible(true);
    }
}

В этом методе мы получаем размеры экрана, используя Toolkit.getDefaultToolkit().getScreenSize(). Затем мы вычисляем координаты x и y для окна JFrame, вычитая половину ширины и высоты фрейма из ширины и высоты экрана соответственно. Наконец, мы устанавливаем положение кадра с помощью frame.setBounds(x, y, frameWidth, frameHeight).

Метод 2: использование класса GraphicsEnvironment
Другой способ центрировать JFrame — использовать класс java.awt.GraphicsEnvironment. Вот пример:

import java.awt.Dimension;
import java.awt.GraphicsEnvironment;
import javax.swing.JFrame;
public class CenteredJFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Centered JFrame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Dimension screenSize = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().getSize();
        int screenWidth = screenSize.width;
        int screenHeight = screenSize.height;

        int frameWidth = 400; // Set your desired frame width
        int frameHeight = 300; // Set your desired frame height

        int x = (screenWidth - frameWidth) / 2;
        int y = (screenHeight - frameHeight) / 2;

        frame.setBounds(x, y, frameWidth, frameHeight);
        frame.setVisible(true);
    }
}

Этот метод использует GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds().getSize()для получения размера экрана. Остальная часть кода аналогична методу 1.

Метод 3: использование метода setLocationRelativeTo
Для более краткого решения Swing предоставляет метод setLocationRelativeTo. Вот пример:

import javax.swing.JFrame;
public class CenteredJFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Centered JFrame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 300); // Set your desired frame size
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

При использовании frame.setLocationRelativeTo(null)окно JFrame будет автоматически центрироваться на экране.

Метод 4. Использование класса GraphicsDevice.
Другой подход предполагает использование класса GraphicsDeviceдля получения размера экрана. Вот фрагмент кода:

import java.awt.Dimension;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import javax.swing.JFrame;
public class CenteredJFrameExample {
    public static void main(String[] args) {
        JFrame frame = new JFrame("Centered JFrame");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
        Dimension screenSize = new Dimension(gd.getDisplayMode().getWidth(), gd.getDisplayMode().getHeight());

        int frameWidth = 400; // Set your desired frame width
        int frameHeight = 300; // Set your desired frame height

        int x = (screenSize.width - frameWidth) / 2;
        int y = (screenSize.height - frameHeight) / 2;

        frame.setBounds(x, y, frameWidth, frameHeight);
        frame.setVisible(true);
    }
}

В этом методе мы используем GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice()для получения графического устройства, а затем получаем размер экрана с помощью gd.getDisplayMode().getWidth()и gd.getDisplayMode().getHeight(). Остальная часть кода аналогична предыдущим методам.

Это лишь некоторые из методов, которые можно использовать для центрирования окна JFrame на экране в Java Swing. В зависимости от ваших конкретных требований и стиля кодирования вы можете выбрать метод, который подходит вам лучше всего. Приятного кодирования!