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.
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);
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);
}
Changez ceci:
public FrameForm() {
initComponents();
}
À ceci:
public FrameForm() {
initComponents();
this.setLocationRelativeTo(null);
}
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();
}
}
}
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 :)
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. :)
Si vous utilisez NetBeans IDE cliquez avec le bouton droit sur Formulaire alors
Propriétés - > Code - > extraire le centre de Génération
En utilisant cette fonction, vous pouvez définir votre position gagnée
setBounds(500, 200, 647, 418);