web-dev-qa-db-fra.com

Comment positionner le formulaire dans l'écran central?

Je suis un développeur .Net, mais je devais 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 puis-je centrer le formulaire dans 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, c’est que j’ai vu le formulaire bouger du haut vers le bas au centre de l’écran. J'ai aussi essayé d'ajouter ce code dans l'événement formWindowOpened et je montre toujours la même action. Y a-t-il un meilleur moyen pour cela? Tout comme dans .NET Application Il y a un CenterScreen Position. Ou si le code ci-dessus est correct, sur quel événement vais-je le mettre?

Merci d'avoir lu ceci.

50
John Woo

Définissez simplement l'emplacement par rapport à null après avoir appelé le pack sur 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);
113

L'exemple suivant centre un cadre à 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 l'environnement graphique local. À partir de cet environnement, nous déterminons le point central. En conjonction avec la taille du cadre, nous parvenons à centrer le cadre. Le setLocation() est la méthode qui déplace le cadre en 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
Jan Bodnar

Change ça:

public FrameForm() { 
    initComponents(); 
}

pour ça:

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

Si vous utilisez NetBeans IDE forme de clic droit alors

Propriétés -> Code -> consultez Generate Center

0
codelover

j'espère que cela vous 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
user3398988

En fait, vous n'avez pas vraiment besoin de coder pour que le formulaire parvienne à l'écran central.

Il suffit de modifier les propriétés du jframe
Suivez les étapes ci-dessous pour modifier:

  • clic droit sur le formulaire
  • change FormSize policy en - génère un code de redimensionnement
  • puis modifiez la position du formulaire X -200 Y-200

Vous avez terminé. Pourquoi prendre la peine de coder. :)

0
Natasha Maruska