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.
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);
}
Ändere das:
public FrameForm() {
initComponents();
}
dazu:
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();
}
}
}
Wenn Sie NetBeans IDE Rechtsklick Formular dann verwenden
Eigenschaften -> Code -> Generate Center auschecken
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 :)
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:
FormSize
-Richtlinie, um - Größenänderungscode zu generierenSie sind fertig. Warum den Schmerz der Codierung ertragen? :)