3

JPanel を拡張する別のクラス (ScorePanel) を保持する BorderLayout を持つ JFrame クラスがあります。これは、ScorePanels をセットアップするコンストラクターによって呼び出されないメソッドである JFrame クラスに関連するコードです。gPanel はメインのゲーム パネルですが、心配する必要はありません。

public void initialize() { //called by controller at the end
    if (Controller.DEBUG) System.out.println("View initialized"); 
    JPanel scores = new JPanel();
    scores.setSize(1000,200);
    scores.setBackground(Color.BLACK);
    ScorePanel score1 = new ScorePanel("Volume", 1);
    ScorePanel score2 = new ScorePanel("Pitch", 2);
    scores.add(score1); scores.add(score2);
    scores.setVisible(true);
    scores.validate();
    this.add(scores, BorderLayout.SOUTH);
    this.add(gpanel, BorderLayout.CENTER); //main game panel
    this.validate();
    this.setVisible(true);
    this.repaint();
}

これは ScorePanel の関連コードです。

private int score; //this current score
private String name; //this name
private int player; //this player

public ScorePanel(String n, int p){ //a JPanel that shows the player's name and score
    super();
    name = n;
    score = 0;
    player = p;
    setBackground(Color.WHITE);
    setSize(450,150);
    setVisible(true);
}

以前にこれを考え出したのですが、何をすべきか思い出せません。これを実行すると、大きな ScorePanels があるはずの場所にいくつかの白い四角が表示されます。

これがスクリーンショットです。私の質問とコードが明確であることを願っています。

未完のピンポンゲーム

4

1 に答える 1

5

JPanelFlowLayout子コンポーネントの優先サイズを尊重するデフォルトで使用します。現在の推奨サイズはおそらく です0 x 0。これを設定するにはオーバーライドgetPreferredSizeします。

ScorePanel score1 = new ScorePanel("Volume", 1) {
    @Override
    public Dimension getPreferredSize() {
        return new Dimension(150, 100);
    };
};

setSizeコンポーネントには使用しないでください。上記のように優先サイズを設定し、JFrame#packを呼び出すようにしてください。

于 2013-05-17T00:00:35.957 に答える