5

フレームを画面の中央に配置しようとしています。このコードがうまく機能する必要があることはわかっています。

Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int) ((screen.getWidth() - getWidth()) /2);
int y = (int) ((screen.getHeight() -getHeight()) /2);
setLocation(x, y); 

またはこれ:

Toolkit tk = Toolkit.getDefaultToolkit();
Dimension screenSize = tk.getScreenSize();
int screenHeight = screenSize.height;
int screenWidth = screenSize.width;
setSize(screenWidth / 2, screenHeight / 2);
setLocation(screenWidth / 4, screenHeight / 4);

考えられるすべてのコードを試しましたが、なぜ機能しないのかわかりません。setRelative を null に使用した画面の右下隅にフレームを移動するだけですが、機能しません。

幅を5倍して何かで割ることで、最終的にフレームを中心に近づけることができましたが、これが正しい方法ではないことはわかっています。

誰が私に何が間違っているのか説明してもらえますか?

問題の修正:

解決策:私は自分で最善の方法を見つけました。同じ問題が発生した場合は、プロパティに移動して generate center をチェックすることでネットビーンズに自動的に実行させ、愚かなコードは忘れてください。

4

4 に答える 4

14

フレームをメイン画面の中央に配置する最も簡単な方法 (複数の画面がある場合はオプションがあります) は、引数として null を指定して setLocationRelativeTo(...) フレーム メソッドを使用することです。

JFrame frame = new JFrame ();
frame.setSize ( 500, 300 );
frame.setLocationRelativeTo ( null );
frame.setVisible ( true );

それがうまくいかない場合は、これを試してください(直接座標):

Dimension ss = Toolkit.getDefaultToolkit ().getScreenSize ();
Dimension frameSize = new Dimension ( 500, 300 );

JFrame frame = new JFrame ();
frame.setBounds ( ss.width / 2 - frameSize.width / 2, 
                  ss.height / 2 - frameSize.height / 2,
                  frameSize.width, frameSize.height );
frame.setVisible ( true );

最後の「究極の」例 - 使用可能な各システム画面で中央のフレームを表示します。

public static void main ( String[] args )
{
    Dimension frameSize = new Dimension ( 500, 300 );
    for ( GraphicsDevice screen : getGraphicsDevices () )
    {
        GraphicsConfiguration gc = screen.getDefaultConfiguration ();
        Rectangle sb = gc.getBounds ();

        JFrame frame = new JFrame ( gc );
        frame.setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
        frame.setBounds ( sb.x + sb.width / 2 - frameSize.width / 2,
                sb.y + sb.height / 2 - frameSize.height / 2, frameSize.width,
                frameSize.height );
        frame.setVisible ( true );
    }
}

public static List<GraphicsDevice> getGraphicsDevices ()
{
    List<GraphicsDevice> devices = new ArrayList<GraphicsDevice> ();
    for ( GraphicsDevice gd : GraphicsEnvironment.getLocalGraphicsEnvironment ()
            .getScreenDevices () )
    {
        if ( gd.getType () == GraphicsDevice.TYPE_RASTER_SCREEN )
        {
            if ( gd == GraphicsEnvironment.getLocalGraphicsEnvironment ()
                    .getDefaultScreenDevice () )
            {
                devices.add ( 0, gd );
            }
            else
            {
                devices.add ( gd );
            }
        }
    }
    return devices;
}
于 2012-06-27T17:52:30.787 に答える
3

私はすでにそれを試しましたが、機能していません.netbeansに何か問題があるのでしょうか??

おそらくネットビーンズで間違っていない

フレームを画面の中央に配置しようとしています

あなたは試すことができます

JFrame frame = new JFrame ();
frame.pack(); // or frame.setSize(int, int);
frame.setLocationByPlatform(true);
frame.setVisible(true);
于 2012-06-27T17:57:23.807 に答える
2

JFrameのサイズを設定する前に、位置をnullに相対的に設定するか、x座標とy座標を介して位置を設定することをドーナツに賭けます。サイズをまだ設定していない場合は、0x0 として扱われ、その死点が画面の中心に設定されます。次にサイズを変更すると、左上隅 (画面の中央) はそのままで、画面の右下に向かって拡大縮小されます。

つまり、 setSize() を画面の中央に配置する前に来るようにします。

あなたがした他のすべては私にはうまく見えます。

于 2014-05-25T02:01:53.510 に答える