私は.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
があります。または、上記のコードが正しい場合、どのイベントに配置しますか?
これを読んでくれてありがとう。
JFrameでpackを呼び出した後、nullに相対的な位置を設定するだけです。
例えば。、
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);
次の例では、画面上のフレームを中央に配置します。
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);
}
これを変更:
public FrameForm() {
initComponents();
}
これに:
public FrameForm() {
initComponents();
this.setLocationRelativeTo(null);
}
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();
}
}
}
NetBeans IDEを使用する場合は、フォームを右クリックしてから
プロパティ->コード->生成センターをチェックアウト
これが役立つことを願っています。
これをソースコードの一番上に置きます:
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);
}
幸運を :)
実際、フォームをセンタースクリーンにするためにコーディングする必要はありません。
Jframeのプロパティを変更するだけです
以下の手順に従って変更します。
FormSize
ポリシーの変更-サイズ変更コードの生成できました。コーディングの苦労をするのはなぜですか。 :)