Как расположить форму в центре экрана? - PullRequest
50 голосов
/ 03 марта 2012

Я - разработчик .Net, но почему-то у меня была задача создать простое приложение на Java по какой-то дополнительной причине.Мне удалось создать это приложение, но моя проблема в том, как я могу центрировать форму на экране при запуске приложения?

Вот мой код:

private void formWindowActivated(java.awt.event.WindowEvent evt) 
{
        // Get the size of the screen
        Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

        // Determine the new location of the window
        int w = this.getSize().width;
        int h = this.getSize().height;
        int x = (dim.width-w)/2;
        int y = (dim.height-h)/2;

        // Move the window
        this.setLocation(x, y);
}

Приведенный выше код работает нормально, но проблема в том, что я видел форму, перемещающуюся от верхнего к большинству экрана.Я также попытался добавить этот код в событие formWindowOpened и все еще показывает то же действие.Есть ли лучший способ для этого?Также как в .NET Application есть CenterScreen Position.Или, если приведенный выше код верен, на какое событие я его поставлю?

Спасибо, что прочитали это.

Ответы [ 9 ]

113 голосов
/ 03 марта 2012

Просто установите местоположение относительно нуля после вызова пакета в JFrame, вот и все.

например.,

  JFrame frame = new JFrame("FooRendererTest");
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.getContentPane().add(mainPanel); // or whatever...
  frame.pack();
  frame.setLocationRelativeTo(null);  // *** this will center your app ***
  frame.setVisible(true);
9 голосов
/ 05 августа 2014

Следующий пример центрирует рамку на экране:

package com.zetcode;

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;


public class CenterOnScreen extends JFrame {

    public CenterOnScreen() {

        initUI();
    }

    private void initUI() {

        setSize(250, 200);
        centerFrame();
        setTitle("Center");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private void centerFrame() {

            Dimension windowSize = getSize();
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            Point centerPoint = ge.getCenterPoint();

            int dx = centerPoint.x - windowSize.width / 2;
            int dy = centerPoint.y - windowSize.height / 2;    
            setLocation(dx, dy);
    }


    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                CenterOnScreen ex = new CenterOnScreen();
                ex.setVisible(true);
            }
        });       
    }
}

Чтобы центрировать рамку на экране, нам нужно получить локальную графическую среду.Из этой среды мы определяем центральную точку.В сочетании с размером кадра нам удается центрировать кадр.setLocation() - это метод, который перемещает рамку в центральное положение.

Обратите внимание, что на самом деле setLocationRelativeTo(null) делает:

public void setLocationRelativeTo(Component c) {
    // target location
    int dx = 0, dy = 0;
    // target GC
    GraphicsConfiguration gc = getGraphicsConfiguration_NoClientCode();
    Rectangle gcBounds = gc.getBounds();

    Dimension windowSize = getSize();

    // search a top-level of c
    Window componentWindow = SunToolkit.getContainingWindow(c);
    if ((c == null) || (componentWindow == null)) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
        gcBounds = gc.getBounds();
        Point centerPoint = ge.getCenterPoint();
        dx = centerPoint.x - windowSize.width / 2;
        dy = centerPoint.y - windowSize.height / 2;
    }

  ...

  setLocation(dx, dy);
}
2 голосов
/ 24 июня 2015

Измените это:

public FrameForm() { 
    initComponents(); 
}

на это:

public FrameForm() {
    initComponents();
    this.setLocationRelativeTo(null);
}
1 голос
/ 19 декабря 2015
public class Example extends JFrame {

public static final int WIDTH = 550;//Any Size
public static final int HEIGHT = 335;//Any Size

public Example(){

      init();

}

private void init() {

    try {
        UIManager
                .setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

        SwingUtilities.updateComponentTreeUI(this);
        Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
        setSize(WIDTH, HEIGHT);

        setLocation((int) (dimension.getWidth() / 2 - WIDTH / 2),
                (int) (dimension.getHeight() / 2 - HEIGHT / 2));


    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (UnsupportedLookAndFeelException e) {
        e.printStackTrace();
    }

}
}
0 голосов
/ 05 января 2016

Если вы используете форму IDE NetBeans, щелкните правой кнопкой мыши, а затем

Свойства -> Код -> проверить Центр генерации

0 голосов
/ 22 июня 2015

На самом деле, вам не нужно кодировать, чтобы заставить форму добраться до центра экрана.

Просто измените свойства jframe
Для изменения выполните следующие шаги:

  • щелкните правой кнопкой мыши форму
  • изменить FormSize политику на - сгенерируйте код изменения размера
  • , затем отредактируйте позицию формы X -200 Y- 200

Вы сделали.Зачем мучиться с кодированием.:)

0 голосов
/ 01 июля 2014

Используя эту функцию, вы можете определить свою выигранную позицию

setBounds(500, 200, 647, 418);
0 голосов
/ 09 марта 2014

Я надеюсь, что это будет полезно.

поместите это в начало исходного кода:

import java.awt.Toolkit;

и затем напишите этот код:

private void formWindowOpened(java.awt.event.WindowEvent evt) {                                  
    int lebar = this.getWidth()/2;
    int tinggi = this.getHeight()/2;
    int x = (Toolkit.getDefaultToolkit().getScreenSize().width/2)-lebar;
    int y = (Toolkit.getDefaultToolkit().getScreenSize().height/2)-tinggi;
    this.setLocation(x, y);
}

хорошоудачи :) 1009 *

0 голосов
/ 01 апреля 2013

Попробуйте использовать это:

this.setBounds(x,y,w,h);
...