You have to address certain situations where it is out of your control. This variable changes as the end users uses different sizes of screen. This is the objective of this discussion actually. To create a Java Frame that stays at the center of any screen at any given size.
Java has a lot of API's that can be abused to create a better application. By using the AWT Toolkit, you're done. With it, getting the screen size is a lot easier nowadays. Armed with simple mathematical computations, then you're ready to go.
Given samples below will show you how to compute the x and y values that will be used to position the window application.
Size of the screen:
height = 2000
width = 2100
Size of your application:
height = 200
width = 300
get the x and y positions:
y = ((height of the screen /2) - (height of the window/2))
= (2000/2) - (200/2)
x = ((width of the screen/2) - (width of the application/2))
= (2100/2) - (300/2))
height = 2000
width = 2100
Size of your application:
height = 200
width = 300
get the x and y positions:
y = ((height of the screen /2) - (height of the window/2))
= (2000/2) - (200/2)
x = ((width of the screen/2) - (width of the application/2))
= (2100/2) - (300/2))
Actually we don't really know the screen size so translating that to java code, we have this:
/* * @author: theredfont */ package com.javaswing; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class JavaSwing implements Runnable{ private JFrame frame; public JavaSwing(){ this.init(); } public void init(){ frame = new JFrame("Screen Centered Frame"); frame.setSize(300, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } @Override public void run() { frame.setVisible(true); } public static void main(String []argv){ Runnable runnable = new JavaSwing(); SwingUtilities.invokeLater(runnable); } }
We created a JFrame using the code above. The above is a working code. When the code is executed, the frame stays at the right most top corner of the screen. To make it stay at the center, follow the code below.
/* * @author: theredfont */ package com.javaswing; import javax.swing.JFrame; import javax.swing.SwingUtilities; import java.awt.Toolkit; public class JavaSwing implements Runnable{ private JFrame frame; Toolkit toolkit; public JavaSwing(){ this.init(); } public void init(){ toolkit = Toolkit.getDefaultToolkit(); frame = new JFrame("Screen Centered Frame"); frame.setSize(300, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(); } public void setLocation(){ int screenX = toolkit.getScreenSize().width; int screenY = toolkit.getScreenSize().height; int x = ((screenX/2) - (frame.getWidth())/2); int y = ((screenY/2) - (frame.getHeight())/2); frame.setLocation(x, y); } @Override public void run() { frame.setVisible(true); } public static void main(String []argv){ Runnable runnable = new JavaSwing(); SwingUtilities.invokeLater(runnable); } }
You can see the code changes on the above.
No comments:
Post a Comment