6

コード:

import java.awt.Dimension;

import javax.swing.*;

public class Game extends JFrame {
    private static final long serialVersionUID = -7919358146481096788L;
    JPanel a = new JPanel();
    public static void main(String[] args) {
        new Game();
    }
    private Game() {
        setTitle("Insert name of game here");
        setLocationRelativeTo(null);
        setLayout(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        a.setPreferredSize(new Dimension(600, 600));
        add(a);
        pack();
        setVisible(true);
    }
}

そこで、の推奨サイズJPanelを600 x 600に設定してフレームをパックしましたが、フレームのサイズは0x0のままです。

これはなぜですか、どうすれば修正できますか?

4

3 に答える 3

10

あなたが言っpack()たように、すべてのコンポーネントがそのpreferredSizeにサイズ変更されるようにウィンドウを配置しようとします。

問題は、レイアウトマネージャーがコンポーネントとそれぞれのpreferredSizesを配置しようとしているように見えることです。ただし、レイアウトマネージャをnullに設定すると、その担当者は誰もいません。

行にコメントを付けてみてくださいsetLayout(null)。結果が表示されます。もちろん、ウィンドウ全体を表示するには、意味のあるを選択して設定する必要がありますLayoutManager

これは私にはうまくいきます:

import java.awt.Dimension;

import javax.swing.*;

public class Game extends JFrame {
    private static final long serialVersionUID = -7919358146481096788L;
    JPanel a = new JPanel();
    public static void main(String[] args) {
        new Game();
    }
    private Game() {
        setTitle("Insert name of game here");
        setLocationRelativeTo(null);
        //setLayout(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        a.setPreferredSize(new Dimension(600, 600));
        add(a);
        pack();
        setVisible(true);
    }
}
于 2012-08-13T17:21:59.390 に答える
2

pack()子のサイズよりも親コンテナの優先サイズを照会するため、次を使用する必要があります。

setPreferredSize(new Dimension(600, 600));

別の注意は電話することです

setLocationRelativeTo(null);

pack()中心座標を計算するために呼び出された後:)

OK、そこにヌルレイアウトを見つけただけです。JFrameのデフォルトのBorderLayoutを使用してみませんか?

于 2012-08-13T17:18:01.697 に答える
2

あなたの問題はsetLayout(null)、ドキュメントが言うのでpack()

このウィンドウのサイズを、そのサブコンポーネントの推奨サイズとレイアウトに合わせて調整します

したがって、レイアウトがないと、正しく実行されません。

これは私にとってはうまくいくようです:

import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Game extends JFrame {

    JPanel panel = new JPanel();

    private void createAndShowGUI() {
        setTitle("FrameDemo");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        panel.setPreferredSize(new Dimension(600, 600));
        add(panel);

        //setLayout(null); //wont work with this call as pack() resizes according to layout manager
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Game().createAndShowGUI();
            }
        });
    }
}
于 2012-08-13T17:20:31.200 に答える