Центрировать JPanel в JFrame

#swing #netbeans #jframe #jpanel

#качать #netbeans #jframe #jpanel

Вопрос:

Как я могу поместить свою JPanel в центр JFrame без использования менеджера компоновки? Конечно, я хочу, чтобы он был универсальным для всех разрешений экрана.

Спасибо, Tomer

Комментарии:

1. Я думаю, что это очень простая процедура. Но я буду рад, если кто-нибудь подскажет мне, как я могу центрировать JPanel в JFrame, с менеджерами компоновки или без них. Спасибо.

Ответ №1:

Если вы не используете layouts ( setLayout(null) ), вам нужно вычислить местоположение JPanel внутри JFrame , например:

 import java.awt.Color;
import javax.swing.*;

public class a extends JFrame {

public a()
{
    JPanel panel = new JPanel();
    panel.setSize(200, 200);
    panel.setBackground(Color.RED);
    setSize(400, 400); // JFrame arbitrary size.
    getContentPane().setLayout(null);
    getContentPane().add(panel);
    setVisible(true);
    // Caculate panel location after showing the JFrame in order to get the right insets (window's title bar).
    int panelX = (getWidth() - panel.getWidth() - getInsets().left - getInsets().right) / 2;
    int panelY = ((getHeight() - panel.getHeight() - getInsets().top - getInsets().bottom) / 2);
    panel.setLocation(panelX, panelY);
}

public static void main(String[] args) {
    new a();
}
}
  

Комментарии:

1. getContentPane().setLayout(null); Этот вопрос был процитирован в другом вопросе на SO. Для справки, null макет здесь не подходит. Это редко, если вообще это правильный путь.