如何在屏幕中心定位一個JDialog?如何在屏幕上居中放置一個JDialog?
68
A
回答
137
在Java 1.4+,你可以這樣做:
final JDialog d = new JDialog();
d.setSize(200,200);
d.setLocationRelativeTo(null);
d.setVisible(true);
或許(預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你可以傳遞一個GraphicEnvironment每個的JDialog/JFrame中/的JWindow構造。該對象描述要使用的顯示器。
5
這裏是我的解決方案來檢索多個顯示器的屏幕尺寸。
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;
}
}
6
兩個助手用於在屏幕內或母體內進行居中。
// 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
使用此行pack()
方法之後:
setLocation((Toolkit.getDefaultToolkit().getScreenSize().width)/2 - getWidth()/2, (Toolkit.getDefaultToolkit().getScreenSize().height)/2 - getHeight()/2);
相關問題
- 1. 使用SKCameraNode在屏幕上居中放置一個節點[Swift]
- 2. 在圖形屏幕上居中放置一個DSL形狀
- 3. 在屏幕上完美地居中放置一個按鈕
- 4. 在屏幕上放置一個元素
- 5. 如何將CrystalReportViewer居中在屏幕上?
- 6. 在屏幕上居中放置不同的圖像
- 7. 將xul對話框居中放置在屏幕上
- 8. 如何在主屏幕上放置一個始終可見的屏幕控制
- 9. 在屏幕上居中一組按鈕
- 10. 如何從一個事件在屏幕上放置圖像?
- 11. 如何使用水平字段在屏幕上居中放置標籤
- 12. 如何在所有屏幕尺寸的網頁上居中放置圖像
- 13. 正確地在2個屏幕上放置QT初始屏幕
- 14. 居中屏幕
- 15. 如何在spritekit的屏幕中心放置一個節點?
- 16. 如何在屏幕中間放置一個容器?
- 17. 如何在Qt Symbian屏幕中心放置一個圖標?
- 18. 如何使用BitmapFont.TextBounds在屏幕上居中一行文字?
- 19. 如何在UIView上居中放置UILabel
- 20. 如何找出顯示JDialog的屏幕
- 21. 如何在一個屏幕上播放兩個視頻?
- 22. 居中在屏幕上的面板
- 23. 在屏幕上居中顯示面板
- 24. 在屏幕上居中照相館
- 25. 如何在谷歌地圖上的屏幕中心放置一個標記
- 26. 在屏幕上居中顯示一個彈出窗口?
- 27. 如何在另一箇中放置一個居中的圓?
- 28. 如何在屏幕上的任何位置放置視圖?
- 29. 如何在React Native的屏幕底部放置一個TextInput?
- 30. CSS佈局放置一個div屏幕
什麼,當你setlocation相對於空究竟是怎麼回事? – 2009-08-19 13:30:14
想補充一點,你確實需要使用setSize(),否則setLocationRelativeTo()將不起作用。我不得不同時使用setSize()和setPreferredSize()以使一切看起來都正確。 – Richard 2011-06-16 13:35:39