wake-up-neo.com

Wie positioniere ich das Formular im mittleren Bildschirm?

Ich bin ein .Net-Entwickler, aber irgendwie war ich aus irgendeinem Grund gezwungen, eine einfache Anwendung in Java) zu erstellen. Ich konnte diese Anwendung erstellen, aber mein Problem ist, wie ich das Formular zentrieren kann auf dem Bildschirm, wenn die Anwendung gestartet wird?

Hier ist mein Code:

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

Der obige Code funktioniert einwandfrei, aber das Problem ist, dass ich gesehen habe, wie sich das Formular vom linken oberen Rand zum mittleren Bildschirm bewegt. Ich habe auch versucht, diesen Code im formWindowOpened -Ereignis hinzuzufügen, und es wird immer noch dieselbe Aktion angezeigt. Gibt es dafür einen besseren Weg? Genau wie in .NET Application da ist ein CenterScreen Position. Oder wenn der obige Code korrekt ist, auf welchem ​​Event werde ich ihn platzieren?

Danke fürs Lesen.

50
John Woo

Setzen Sie die Position nach dem Aufruf von pack auf dem JFrame einfach auf null, fertig.

z.B.,

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

Im folgenden Beispiel wird ein Rahmen auf dem Bildschirm zentriert:

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

Um einen Frame auf einem Bildschirm zu zentrieren, müssen Sie die lokale Grafikumgebung herunterladen. Aus dieser Umgebung bestimmen wir den Mittelpunkt. In Verbindung mit der Rahmengröße schaffen wir es, den Rahmen zu zentrieren. Die setLocation() ist die Methode, mit der der Frame an die zentrale Position verschoben wird.

Beachten Sie, dass dies tatsächlich die Funktion setLocationRelativeTo(null) ist:

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);
}
9
Jan Bodnar

Ändere das:

public FrameForm() { 
    initComponents(); 
}

dazu:

public FrameForm() {
    initComponents();
    this.setLocationRelativeTo(null);
}
2
mesutpiskin
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();
    }

}
}
1
Jaber p.m.r

Wenn Sie NetBeans IDE Rechtsklick Formular dann verwenden

Eigenschaften -> Code -> Generate Center auschecken

0
codelover

ich hoffe, das wird hilfreich sein.

setze dies oben auf den Quellcode:

import Java.awt.Toolkit;

und schreibe dann diesen Code:

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

viel Glück :)

0
user3398988

Eigentlich müssen Sie nicht wirklich codieren, um das Formular in den Mittelpunkt zu rücken.

Ändern Sie einfach die Eigenschaften des jframe
Befolgen Sie zum Ändern die folgenden Schritte:

  • rechtsklick auf das Formular
  • ändern Sie die FormSize -Richtlinie, um - Größenänderungscode zu generieren
  • bearbeiten Sie dann die Formularposition X -200 Y-200

Sie sind fertig. Warum den Schmerz der Codierung ertragen? :)

0
Natasha Maruska