Подтвердить что ты не робот

Как разместить форму на центральном экране?

Я разработчик .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. Или, если код выше правильно, на каком событии я его положу?

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

4b9b3361

Ответ 1

Просто установите местоположение относительно нуля после вызова пакета на 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);

Ответ 2

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

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);
}

Ответ 3

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

public FrameForm() { 
    initComponents(); 
}

:

public FrameForm() {
    initComponents();
    this.setLocationRelativeTo(null);
}

Ответ 4

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();
    }

}
}

Ответ 5

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

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

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);
}

удачи:)

Ответ 6

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

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

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

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

Ответ 7

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

Свойства → Код → проверить Generate Center

Ответ 8

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

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

Ответ 9

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

setBounds(500, 200, 647, 418);