web-dev-qa-db-ja.com

フォームを中央の画面に配置する方法は?

私は.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があります。または、上記のコードが正しい場合、どのイベントに配置しますか?

これを読んでくれてありがとう。

50
John Woo

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);
}
9
Jan Bodnar

これを変更:

public FrameForm() { 
    initComponents(); 
}

これに:

public FrameForm() {
    initComponents();
    this.setLocationRelativeTo(null);
}
2
mesutpiskin
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();
    }

}
}
1
Jaber p.m.r

NetBeans IDEを使用する場合は、フォームを右クリックしてから

プロパティ->コード->生成センターをチェックアウト

0
codelover

これが役立つことを願っています。

これをソースコードの一番上に置きます:

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);
}

幸運を :)

0
user3398988

実際、フォームをセンタースクリーンにするためにコーディングする必要はありません。

Jframeのプロパティを変更するだけです
以下の手順に従って変更します。

  • フォームを右クリック
  • FormSizeポリシーの変更-サイズ変更コードの生成
  • 次に、フォームの位置を編集しますX -200 Y- 200

できました。コーディングの苦労をするのはなぜですか。 :)

0
Natasha Maruska