Wie gehe ich vor, um einen JDialog in der Mitte des Bildschirms zu positionieren?Wie zentriere ich einen JDialog auf dem Bildschirm?
68
A
Antwort
137
In Java 1.4+ Sie tun können:
final JDialog d = new JDialog();
d.setSize(200,200);
d.setLocationRelativeTo(null);
d.setVisible(true);
Oder vielleicht (pre 1.4):
final JDialog d = new JDialog();
d.setSize(200, 200);
final Toolkit toolkit = Toolkit.getDefaultToolkit();
final Dimension screenSize = toolkit.getScreenSize();
final int x = (screenSize.width - d.getWidth())/2;
final int y = (screenSize.height - d.getHeight())/2;
d.setLocation(x, y);
d.setVisible(true);
3
AFAIK Sie eine GraphicEnvironment zu jedem JDialog/JFrame/JWindow Konstruktor übergeben kann. Dieses Objekt beschreibt den zu verwendenden Monitor.
5
Hier ist meine Lösung, Bildschirmgröße mit mehreren Monitoren zu erhalten.
import java.awt.*;
import javax.swing.JFrame;
/**
* Méthodes statiques pour récupérer les informations d'un écran.
*
* @author Jean-Claude Stritt
* @version 1.0/24.2.2009
*/
public class ScreenInfo {
/**
* Permet de récupérer le numéro de l'écran par rapport à la fenêtre affichée.
* @return le numéro 1, 2, ... (ID) de l'écran
*/
public static int getScreenID(JFrame jf) {
int scrID = 1;
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] gd = ge.getScreenDevices();
for (int i = 0; i < gd.length; i++) {
GraphicsConfiguration gc = gd[i].getDefaultConfiguration();
Rectangle r = gc.getBounds();
if (r.contains(jf.getLocation())) {
scrID = i+1;
}
}
return scrID;
}
/**
* Permet de récupérer la dimension (largeur, hauteur) en px d'un écran spécifié.
* @param scrID --> le n° d'écran
* @return la dimension (largeur, hauteur) en pixels de l'écran spécifié
*/
public static Dimension getScreenDimension(int scrID) {
Dimension d = new Dimension(0, 0);
if (scrID > 0) {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
DisplayMode mode = ge.getScreenDevices()[scrID - 1].getDisplayMode();
d.setSize(mode.getWidth(), mode.getHeight());
}
return d;
}
/**
* Permet de récupérer la largeur en pixels d'un écran spécifié.
* @param scrID --> le n° d'écran
* @return la largeur en px de l'écran spécifié
*/
public static int getScreenWidth(int scrID) {
Dimension d = getScreenDimension(scrID);
return d.width;
}
/**
* Permet de récupérer la hauteur en pixels d'un écran spécifié.
* @param scrID --> le n° d'écran
* @return la hauteur en px de l'écran spécifié
*/
public static int getScreenHeight(int scrID) {
Dimension d = getScreenDimension(scrID);
return d.height;
}
}
+0
plus eins, weil die Verwendung der Muttersprache die Codequalität erhöht. –
6
Zwei Helfer für im Bildschirm oder in der Mutter Zentrierung.
// Center on screen (absolute true/false (exact center or 25% upper left))
public void centerOnScreen(final Component c, final boolean absolute) {
final int width = c.getWidth();
final int height = c.getHeight();
final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int x = (screenSize.width/2) - (width/2);
int y = (screenSize.height/2) - (height/2);
if (!absolute) {
x /= 2;
y /= 2;
}
c.setLocation(x, y);
}
// Center on parent (absolute true/false (exact center or 25% upper left))
public void centerOnParent(final Window child, final boolean absolute) {
child.pack();
boolean useChildsOwner = child.getOwner() != null ? ((child.getOwner() instanceof JFrame) || (child.getOwner() instanceof JDialog)) : false;
final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
final Dimension parentSize = useChildsOwner ? child.getOwner().getSize() : screenSize ;
final Point parentLocationOnScreen = useChildsOwner ? child.getOwner().getLocationOnScreen() : new Point(0,0) ;
final Dimension childSize = child.getSize();
childSize.width = Math.min(childSize.width, screenSize.width);
childSize.height = Math.min(childSize.height, screenSize.height);
child.setSize(childSize);
int x;
int y;
if ((child.getOwner() != null) && child.getOwner().isShowing()) {
x = (parentSize.width - childSize.width)/2;
y = (parentSize.height - childSize.height)/2;
x += parentLocationOnScreen.x;
y += parentLocationOnScreen.y;
} else {
x = (screenSize.width - childSize.width)/2;
y = (screenSize.height - childSize.height)/2;
}
if (!absolute) {
x /= 2;
y /= 2;
}
child.setLocation(x, y);
}
5
Verwenden Sie diese Zeile nach der pack()
Methode:
setLocation((Toolkit.getDefaultToolkit().getScreenSize().width)/2 - getWidth()/2, (Toolkit.getDefaultToolkit().getScreenSize().height)/2 - getHeight()/2);
Verwandte Themen
- 1. Wie zentriere ich ein Fenster auf dem Bildschirm in C#?
- 2. Wie zentriere ich einen iframe?
- 3. Wie auf dem ein JDialog screenen, um herauszufinden, ist
- 4. Wie zentriere ich einen Bootstrap-Container?
- 5. Wie zentriere ich ein Sprite?
- 6. Zentriere einen SKLabelNode auf einem SKSpriteNode
- 7. Wie man einen JDialog über JButtons schließt
- 8. Zeichnen auf dem Bildschirm brauche ich Oberflächenansicht?
- 9. Wie man einen JDialog richtig zerstört?
- 10. Wie zentriere ich linksbündige Elemente?
- 11. Wie zentriere ich meine Formularschaltfläche?
- 12. Wie zentriere ich meine Navigationselemente?
- 13. Wie zentriere ich einen Twitter-Bootstrap-Alarm hintereinander?
- 14. Wie zentriere ich einen Bereich innerhalb eines TD?
- 15. Wie kann ich Buchstaben mit jQuery auf dem Bildschirm zeichnen
- 16. RecyclerWechsel Standort auf dem Bildschirm
- 17. Floating Rectangle auf dem Bildschirm
- 18. Wie zeige ich einen Ort aus einer Tabelle auf einer Karte auf dem nächsten Bildschirm an?
- 19. Wie zentriere ich einen Rahmen innerhalb eines Rahmens in Tkinter?
- 20. Python Zeichnung auf dem Bildschirm
- 21. Wie Bash-Shell-Fehler auf dem Bildschirm
- 22. Wie Apfel Uhr Bildschirm, auf dem Mac
- 23. Wie Pixel auf dem Bildschirm zu messen
- 24. Wie bekomme ich die Mausposition auf dem Bildschirm in Qt?
- 25. Wie zeichne ich Breiten-/Längenkoordinaten auf dem Bildschirm?
- 26. Wie setze ich ProgressBar auf dem mittleren Bildschirm im Rahmenlayout?
- 27. Wie setze ich wxPython Mainframe unten rechts auf dem Bildschirm?
- 28. Wie bekomme ich die Mausposition auf dem Bildschirm in WPF?
- 29. Suchen Elementposition auf dem Bildschirm
- 30. Wie zentriere ich ein Label auf einem Bild in iOS?
, was genau passiert, wenn Sie relative SetLocation auf null? –
Wollte hinzufügen, dass Sie setSize() verwenden müssen, sonst funktioniert die setLocationRelativeTo() nicht. Ich musste sowohl setSize() UND setPreferredSize() verwenden, um alles richtig aussehen zu lassen. – Richard
Antwort auf die Frage von @marked: Wenn die Komponente derzeit nicht angezeigt wird, oder c ist null, wird das Fenster in der Mitte des Bildschirms platziert. (aus dem java.awt.Window javadocs) –