Comment positionner le formulaire dans l'écran central?

Je suis un développeur. Net mais d'une manière ou d'une autre, j'étais chargé de créer une application simple en java pour une raison supplémentaire. J'ai pu créer cette application, mais mon problème est de savoir comment centrer le formulaire à l'écran lorsque l'application est lancée?

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

Le code ci-dessus fonctionne bien mais le problème est que j'ai vu le formulaire passer de l'écran topleft le plus au centre. J'ai également essayé d'ajouter ce code dans l'événement formWindowOpened et montre toujours la même action. Est-il une meilleure façon de pour cette? Tout comme dans .NET Application il est un CenterScreen Position. Ou si le code ci-dessus est correct, sur quel événement vais-je le mettre?

Merci d'avoir lu ceci.

47
demandé sur Hovercraft Full Of Eels 2012-03-03 07:59:58

9 réponses

Il suffit de définir l'emplacement par rapport à null après avoir appelé pack sur le JFrame, c'est tout.

Par exemple,

  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);
101
répondu Hovercraft Full Of Eels 2012-03-03 04:23:11

L'exemple suivant centre une image sur l'écran:

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

Afin de centrer un cadre sur un écran, nous devons obtenir le local environnement graphique. De cet environnement, nous déterminons le point central. En conjonction avec la taille du cadre, nous gérons au centre de l'image. Le setLocation() est la méthode qui déplace le cadre vers la position centrale.

Notez que c'est en fait ce que fait le 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);
}
9
répondu Jan Bodnar 2014-08-05 14:53:02

Changez ceci:

public FrameForm() { 
    initComponents(); 
}

À ceci:

public FrameForm() {
    initComponents();
    this.setLocationRelativeTo(null);
}
2
répondu mesutpiskin 2015-06-24 10:58:57
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
répondu Jaber p.m.r 2015-12-19 03:25:31

J'espère que cela sera utile.

Mettez ceci en haut du code source:

import java.awt.Toolkit;

Puis écrivez ce 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);
}

Bonne chance :)

0
répondu user3398988 2014-03-09 16:59:09

En fait, vous n'avez pas vraiment besoin de coder pour que le formulaire arrive à centerscreen.

Modifiez simplement les propriétés du jframe
Suivez les étapes ci-dessous pour modifier:

  • faites un clic droit sur le formulaire
  • Modifiez la stratégie FormSize pour générer du code de redimensionnement
  • modifiez ensuite la position du formulaire X -200 Y-200

Vous avez terminé. Pourquoi prendre la douleur de codage. :)

0
répondu Natasha Maruska 2015-06-22 03:52:29

Si vous utilisez NetBeans IDE cliquez avec le bouton droit sur Formulaire alors

Propriétés - > Code - > extraire le centre de Génération

0
répondu shabeen vk 2016-01-05 07:36:29

En utilisant cette fonction, vous pouvez définir votre position gagnée

setBounds(500, 200, 647, 418);
-2
répondu Prasad V S 2014-07-01 08:10:34

Essayez d'utiliser ceci:

this.setBounds(x,y,w,h);
-2
répondu pbinas 2015-08-28 22:08:54