Как разместить форму на центральном экране?
Я разработчик .Net, но каким-то образом я поставил задачу создать простое приложение в java по какой-то дополнительной причине. Я смог создать это приложение, но моя проблема заключается в том, как я могу сосредоточить форму на экране при запуске приложения?
Вот мой код:
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);
}
Приведенный выше код отлично работает, но проблема в том, что я видел, как форма перемещается с самого большого на центральный экран. Я также попытался добавить этот код в событие formWindowOpened
и по-прежнему показывает одно и то же действие. Есть ли лучший способ для этого? Как и в .NET Application
, существует CenterScreen Position
. Или, если код выше правильно, на каком событии я его положу?
Спасибо, что прочитали это.
Ответы
Ответ 1
Просто установите местоположение относительно нуля после вызова пакета на JFrame, чтобы он.
например.
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);
Ответ 2
Следующий пример центрирует рамку на экране:
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);
}
});
}
}
Чтобы центрировать рамку на экране, нам нужно получить локальную
графическая среда. Из этой среды мы определяем
Центральная точка. В сочетании с размером кадра мы управляем
для центровки кадра. setLocation()
- это метод, который
перемещает рамку в центральное положение.
Обратите внимание, что это действительно то, что делает setLocationRelativeTo(null)
:
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);
}
Ответ 3
Измените это:
public FrameForm() {
initComponents();
}
:
public FrameForm() {
initComponents();
this.setLocationRelativeTo(null);
}
Ответ 4
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();
}
}
}
Ответ 5
Надеюсь, это будет полезно.
поместите это в начало исходного кода:
import java.awt.Toolkit;
а затем напишите этот код:
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);
}
удачи:)
Ответ 6
Собственно, вам действительно не нужно вводить код, чтобы форма добиралась до центра экрана.
Просто измените свойства jframe
Для изменения выполните следующие действия:
- щелкните правой кнопкой мыши по форме
- изменить
FormSize
политику - создать код изменения размера
- затем отредактируйте позицию формы X-200 Y-200
Вы закончили. Зачем страдать от кодирования.:)
Ответ 7
Если вы используете форму правой кнопки мыши IDE NetBeans, то
Свойства → Код → проверить Generate Center
Ответ 8
Попробуйте использовать это:
this.setBounds(x,y,w,h);
Ответ 9
Используя эту функцию, вы можете определить свою выигранную позицию.
setBounds(500, 200, 647, 418);