1

したがって、次のような GUI がある場合:

import javax.swing.GroupLayout;
public class MyTest extends javax.swing.JFrame {

    public MyTest() {
        initComponents();
    }

    private void initComponents() {

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("This is a sample GUI");

        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);

        layout.setHorizontalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGap(0, 244, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGap(0, 85, Short.MAX_VALUE)
        );

        pack();
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MyTest().setVisible(true);
            }
        });
    }   
}

プログラムを実行すると、画面の左上の (0,0) 位置に配置されます。とにかく、これを画面の中央または別のカスタム位置に揃えることができますか?
setLocation(left,top) のように、GroupLayout を使用せずにフレームのみを使用する場合、これはうまく機能しますが、この実装では、この GUI のデフォルトの位置を変更するにはどうすればよいですか?

4

3 に答える 3

4

GroupLayout制約なしで a の単一コンポーネントとして aを持つ contianer を配置しGridBagLayoutます。コンテナ全体が中央に配置されます。


GUI全体(すべてを含む)を画面の中央に配置する必要があるだけです。

それはとはGroupLayoutの関係もありませsetLocationRelativeTo(null)ただし、 Swing GUI を最適な位置に配置する方法を読んで、GUI を画面上に配置するさらに優れた方法 (つまり、画面の中央よりも適切な場所 - 以下の例) を参照してください。

于 2011-12-09T10:33:14.913 に答える
3

以前の質問で述べたように、フレーム自体を中央に配置することについて言及していると思う前に、GridBagLayout制約なしで a を使用してください。これは、コンポーネントを親コンテナの中央に配置する効果があります。フレームにはウィンドウの装飾があるため、「親コンテナー」自体が画面中央のわずかに下にあることに注意してください。それが問題である場合、私が考えることができる唯一の「修正」は、装飾されていないフレームを使用することです.

壊れているのは要件だと思うので、「修正」を逆コンマで囲みました。

中央揃えのグループレイアウト

import java.awt.*;
import javax.swing.*;

public class MyTest extends JFrame {

    public MyTest() {
        initComponents();
    }

    private void initComponents() {

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setTitle("This is a sample GUI");
        getContentPane().setLayout(new GridBagLayout());

        JPanel gui = new JPanel();
        gui.setBackground(Color.GREEN);

        GroupLayout layout = new GroupLayout(gui);
        gui.setLayout(layout);

        layout.setHorizontalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGap(0, 244, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(GroupLayout.Alignment.LEADING)
            .addGap(0, 85, Short.MAX_VALUE)
        );

        add(gui);

        pack();
        setExtendedState(Frame.MAXIMIZED_BOTH );
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new MyTest().setVisible(true);
            }
        });
    }
}
于 2011-12-12T12:16:55.190 に答える
0

質問には答えてくれたと思いますが、使い方がよくわかりませんでした。pack(); の前に以下を呼び出すだけです。まさに私が探していたものでした:

this.setLocation(500,300); //value left, top in pixes
pack();  

したがって、基本的に私が知る必要があるのは、の正確な使用法とsetLocation(x,y);、キーワードの使用法でした"this"、ありがとう。

于 2011-12-15T14:39:04.307 に答える