Java에서 창을 중앙에 배치하는 방법
A를 센터링하는 가장 쉬운 방법은 무엇입니까?java.awt.Window
예를 들어,JFrame
또는JDialog
?
이 링크에서
Java 1.4 이후를 사용하는 경우 대화상자, 프레임 또는 창에서 setLocationRelativeTo(null)를 사용하여 중앙에 배치할 수 있습니다.
이 기능은 Java의 모든 버전에서 작동합니다.
public static void centreWindow(Window frame) {
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2);
int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
frame.setLocation(x, y);
}
setLocationRelativeTo(null)
다음 중 하나를 사용한 후에 호출해야 합니다.setSize(x,y)
또는 를 사용합니다.pack()
.
setLocationRelativeTo(null)와 Tokit.getDefault 모두Toolkit().getScreenSize() 기술은 프라이머리 모니터에서만 작동합니다.멀티 모니터 환경에서는, 이러한 종류의 계산을 실시하기 전에, 창이 표시되고 있는 특정의 모니터에 관한 정보를 입수할 필요가 있습니다.
때로는 중요하고 때로는 그렇지 않다...
자세한 내용은 GraphicsEnvironment javadocs를 참조하십시오.
Linux의 경우 코드
setLocationRelativeTo(null)
멀티 디스플레이 환경에서 창을 실행할 때마다 임의의 위치에 둡니다.그리고 암호는
setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - getSize().width) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - getSize().height) / 2);
두 디스플레이 사이에 있는 정확한 중앙으로 창을 "절단"합니다.다음 방법을 사용하여 중심을 잡았습니다.
private void setWindowPosition(JFrame window, int screen)
{
GraphicsEnvironment env = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice[] allDevices = env.getScreenDevices();
int topLeftX, topLeftY, screenX, screenY, windowPosX, windowPosY;
if (screen < allDevices.length && screen > -1)
{
topLeftX = allDevices[screen].getDefaultConfiguration().getBounds().x;
topLeftY = allDevices[screen].getDefaultConfiguration().getBounds().y;
screenX = allDevices[screen].getDefaultConfiguration().getBounds().width;
screenY = allDevices[screen].getDefaultConfiguration().getBounds().height;
}
else
{
topLeftX = allDevices[0].getDefaultConfiguration().getBounds().x;
topLeftY = allDevices[0].getDefaultConfiguration().getBounds().y;
screenX = allDevices[0].getDefaultConfiguration().getBounds().width;
screenY = allDevices[0].getDefaultConfiguration().getBounds().height;
}
windowPosX = ((screenX - window.getWidth()) / 2) + topLeftX;
windowPosY = ((screenY - window.getHeight()) / 2) + topLeftY;
window.setLocation(windowPosX, windowPosY);
}
첫 번째 디스플레이의 중앙에 창이 나타나도록 합니다.이것은 아마 가장 쉬운 해결책이 아닐 것이다.
Linux, Windows 및 Mac에서 올바르게 동작합니다.
드디어 NetBeans에서 Swing GUI Forms를 사용하여 메인 jFrame을 중앙으로 하기 위해 코드 묶음을 얻을 수 있었습니다.
package my.SampleUIdemo;
import java.awt.*;
public class classSampleUIdemo extends javax.swing.JFrame {
///
public classSampleUIdemo() {
initComponents();
CenteredFrame(this); // <--- Here ya go.
}
// ...
// void main() and other public method declarations here...
/// modular approach
public void CenteredFrame(javax.swing.JFrame objFrame){
Dimension objDimension = Toolkit.getDefaultToolkit().getScreenSize();
int iCoordX = (objDimension.width - objFrame.getWidth()) / 2;
int iCoordY = (objDimension.height - objFrame.getHeight()) / 2;
objFrame.setLocation(iCoordX, iCoordY);
}
}
또는
package my.SampleUIdemo;
import java.awt.*;
public class classSampleUIdemo extends javax.swing.JFrame {
///
public classSampleUIdemo() {
initComponents();
//------>> Insert your code here to center main jFrame.
Dimension objDimension = Toolkit.getDefaultToolkit().getScreenSize();
int iCoordX = (objDimension.width - this.getWidth()) / 2;
int iCoordY = (objDimension.height - this.getHeight()) / 2;
this.setLocation(iCoordX, iCoordY);
//------>>
}
// ...
// void main() and other public method declarations here...
}
또는
package my.SampleUIdemo;
import java.awt.*;
public class classSampleUIdemo extends javax.swing.JFrame {
///
public classSampleUIdemo() {
initComponents();
this.setLocationRelativeTo(null); // <<--- plain and simple
}
// ...
// void main() and other public method declarations here...
}
아래는 기존 창의 맨 위에 프레임을 표시하기 위한 코드입니다.
public class SwingContainerDemo {
private JFrame mainFrame;
private JPanel controlPanel;
private JLabel msglabel;
Frame.setLayout(new FlowLayout());
mainFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
System.exit(0);
}
});
//headerLabel = new JLabel("", JLabel.CENTER);
/* statusLabel = new JLabel("",JLabel.CENTER);
statusLabel.setSize(350,100);
*/ msglabel = new JLabel("Welcome to TutorialsPoint SWING Tutorial.", JLabel.CENTER);
controlPanel = new JPanel();
controlPanel.setLayout(new FlowLayout());
//mainFrame.add(headerLabel);
mainFrame.add(controlPanel);
// mainFrame.add(statusLabel);
mainFrame.setUndecorated(true);
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
mainFrame.setVisible(true);
centreWindow(mainFrame);
}
public static void centreWindow(Window frame) {
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2);
int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
frame.setLocation(x, 0);
}
public void showJFrameDemo(){
/* headerLabel.setText("Container in action: JFrame"); */
final JFrame frame = new JFrame();
frame.setSize(300, 300);
frame.setLayout(new FlowLayout());
frame.add(msglabel);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent windowEvent){
frame.dispose();
}
});
JButton okButton = new JButton("Capture");
okButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// statusLabel.setText("A Frame shown to the user.");
// frame.setVisible(true);
mainFrame.setState(Frame.ICONIFIED);
Robot robot = null;
try {
robot = new Robot();
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
final Dimension screenSize = Toolkit.getDefaultToolkit().
getScreenSize();
final BufferedImage screen = robot.createScreenCapture(
new Rectangle(screenSize));
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new ScreenCaptureRectangle(screen);
}
});
mainFrame.setState(Frame.NORMAL);
}
});
controlPanel.add(okButton);
mainFrame.setVisible(true);
} public static void main(String[] args)이 예외 {}을(를) 발생시킵니다.
new SwingContainerDemo().showJFrameDemo();
}
다음 항목은 JDK 1.7.0.07에서는 동작하지 않습니다.
frame.setLocationRelativeTo(null);
왼쪽 상단 모서리를 중앙에 배치합니다(창 중앙과 동일하지 않음).다른 하나는 frame.getSize()와 dimension.getSize()도 동작하지 않습니다.
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2);
int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
frame.setLocation(x, y);
getSize() 메서드는 Component 클래스에서 상속되므로 frame.getSize는 창의 크기도 반환합니다.따라서 수직 및 수평 치수에서 수직 및 수평 치수의 절반을 빼면 왼쪽 상단 모서리의 x, y 좌표를 찾을 수 있으며, 중앙점의 위치도 알 수 있으며, 이 위치도 창을 중심으로 합니다.단, 위 코드의 첫 번째 행인 "Dimension..."이 도움이 됩니다.중심에 맞추려면 다음과 같이 하십시오.
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
JLabel emptyLabel = new JLabel("");
emptyLabel.setPreferredSize(new Dimension( (int)dimension.getWidth() / 2, (int)dimension.getHeight()/2 ));
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
frame.setLocation((int)dimension.getWidth()/4, (int)dimension.getHeight()/4);
JLabel이 화면 크기를 설정합니다.Oracle/Sun 사이트의 Java 튜토리얼에서 이용 가능한 FrameDemo.java에 있습니다.화면크기의 절반 높이/폭으로 설정했습니다.그리고 왼쪽 상단을 왼쪽에서 화면 크기의 1/4로, 위쪽에서 화면 크기의 1/4로 배치하여 중심을 맞췄습니다.비슷한 컨셉을 사용할 수 있습니다.
frame.setLocationRelativeTo(null);
완전한 예:
public class BorderLayoutPanel {
private JFrame mainFrame;
private JButton btnLeft, btnRight, btnTop, btnBottom, btnCenter;
public BorderLayoutPanel() {
mainFrame = new JFrame("Border Layout Example");
btnLeft = new JButton("LEFT");
btnRight = new JButton("RIGHT");
btnTop = new JButton("TOP");
btnBottom = new JButton("BOTTOM");
btnCenter = new JButton("CENTER");
}
public void SetLayout() {
mainFrame.add(btnTop, BorderLayout.NORTH);
mainFrame.add(btnBottom, BorderLayout.SOUTH);
mainFrame.add(btnLeft, BorderLayout.EAST);
mainFrame.add(btnRight, BorderLayout.WEST);
mainFrame.add(btnCenter, BorderLayout.CENTER);
// mainFrame.setSize(200, 200);
// or
mainFrame.pack();
mainFrame.setVisible(true);
//take up the default look and feel specified by windows themes
mainFrame.setDefaultLookAndFeelDecorated(true);
//make the window startup position be centered
mainFrame.setLocationRelativeTo(null);
mainFrame.setDefaultCloseOperation(mainFrame.EXIT_ON_CLOSE);
}
}
보면 창 수 setLocationRelativeTo(null)
★★★★★★★★★★★★★★★★★」setLocation(x,y)
중심에서 벗어나게 되는 거죠
콜 후에, 다음의 몇개의 방법을 사용해 주세요.pack()
창 자체의 치수를 사용하여 화면상의 어디에 배치할지를 계산할 수 있기 때문입니다.pack()
라고 합니다. 치수가 생각하시는 것과 다르므로 창문의 중앙에 놓기 위한 계산을 생략합니다.이게 도움이 됐으면 좋겠다.
예:3행의 my Window() 안에는 화면 중앙에 창을 설정하는데 필요한 코드가 있습니다.
JFrame window;
public myWindow() {
window = new JFrame();
window.setSize(1200,800);
window.setLocationRelativeTo(null); // this line set the window in the center of thr screen
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.getContentPane().setBackground(Color.BLACK);
window.setLayout(null); // disable the default layout to use custom one.
window.setVisible(true); // to show the window on the screen.
}
는 을 으로 하고 있습니다.Window
현재 모니터의 중앙(마우스 포인터가 있는 위치)에 있습니다.
public static final void centerWindow(final Window window) {
GraphicsDevice screen = MouseInfo.getPointerInfo().getDevice();
Rectangle r = screen.getDefaultConfiguration().getBounds();
int x = (r.width - window.getWidth()) / 2 + r.x;
int y = (r.height - window.getHeight()) / 2 + r.y;
window.setLocation(x, y);
}
이것도 시도해 보세요.
Frame frame = new Frame("Centered Frame");
Dimension dimemsion = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation(dimemsion.width/2-frame.getSize().width/2, dimemsion.height/2-frame.getSize().height/2);
.getHeight()
★★★★★★★★★★★★★★★★★」getwidth()
되지 않습니다.해 주세요.에 의해 체크됩니다.System.out.println(frame.getHeight());
예를 다음과 같이 .
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x=(int)((dimension.getWidth() - 450)/2);
int y=(int)((dimension.getHeight() - 450)/2);
jf.setLocation(x, y);
둘 다 450은 내 프레임 폭 n 높이입니다.
public class SwingExample implements Runnable {
@Override
public void run() {
// Create the window
final JFrame f = new JFrame("Hello, World!");
SwingExample.centerWindow(f);
f.setPreferredSize(new Dimension(500, 250));
f.setMaximumSize(new Dimension(10000, 200));
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void centerWindow(JFrame frame) {
Insets insets = frame.getInsets();
frame.setSize(new Dimension(insets.left + insets.right + 500, insets.top + insets.bottom + 250));
frame.setVisible(true);
frame.setResizable(false);
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2);
int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
frame.setLocation(x, y);
}
}
콜의 순서는 중요합니다.
첫 번째 -
pack();
두 번째 -
setLocationRelativeTo(null);
Donal의 답변 외에 Java 창이 창 중앙에 완벽하게 배치되도록 작은 계산을 추가하고자 합니다.'상단 좌측'뿐만 아니라the window is at the center of the window
.
public static void centreWindow(JFrame frame, int width, int height) {
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((dimension.getWidth() - frame.getWidth()) / 2);
int y = (int) ((dimension.getHeight() - frame.getHeight()) / 2);
// calculate perfect center
int perf_x = (int) x - width/2;
int perf_y = (int) y - height/2;
frame.setLocation(perf_x, perf_y);
}
Java NetBeans에 대한 간단한 답변을 원하는 경우:
JFrame을 마우스 오른쪽 버튼으로 클릭하고 속성으로 이동한 다음 코드로 이동하여 generate center 옵션을 선택합니다.
참조용 이미지 : [1] : https://i.stack.imgur.com/RFXbL.png
앱 창의 중앙을 누르고 싶다면, 해결하여 팔로우할 수 있습니다.
int x = (Toolkit.getDefaultToolkit().getScreenSize().width) - getSize().width) / 2;
int y = (Toolkit.getDefaultToolkit().getScreenSize().height) - getSize().height) / 2;
setLocation(x,y);
getSize() 함수는 앱 프레임 크기입니다.getScreenSize()는 PC 화면 크기입니다.
언급URL : https://stackoverflow.com/questions/144892/how-to-center-a-window-in-java
'sourcecode' 카테고리의 다른 글
Ruby gem mysql2 설치 실패 (0) | 2022.09.05 |
---|---|
MacOSX homebrew mysql 루트 패스워드 (0) | 2022.09.04 |
java.displaces를 클릭합니다.부정 인수예외:AppCompat는 현재 테마 기능을 지원하지 않습니다. (0) | 2022.09.04 |
OSX Yosemite로 "업그레이드"한 후 RStudio/R에서 rJava 로드 오류 발생 (0) | 2022.09.04 |
MariaDB 10.1에서 비활성 날짜 값을 제거하려면 어떻게 해야 합니까? (0) | 2022.09.04 |