2017-03-14 12 views
0

私は問題を抱えている:私は小さなゲームを作成したい、私は次のようなウィンドウを行う必要があります。JavaでsetPreferredSizeを使用するにはどうすればよいですか?

enter image description here

私は「言葉で楽しい」のフォントサイズを変更しようとしたときに、それを変更されていません...

どうすればよいですか?

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



public class GameWords extends JFrame 

{ 
    private static int W = 800 ; 
    private static int H = 600 ; 



    public GameWords() 
    { 
     setTitle (" Word Order Game ") ; 
     setSize (H , W) ; 
     setLayout (new FlowLayout()) ; 
     setDefaultCloseOperation (EXIT_ON_CLOSE) ; 
     createContent() ; 
     setVisible (true) ; 
    } 

    public void createContent() 
    { 
     JLabel heading = new JLabel (" Fun With Words ") ; 
     heading.setFont (heading.getFont().deriveFont (26f)); 
     heading.setPreferredSize (new Dimension (H , 4 * W)) ; 
     JLabel h1 = new JLabel (" Hey Kids! Want to prictice your typing and word-ordering Skills ? \n") ; 
     add (heading) ; 
     add (h1) ; 


    } 


    public static void main(String[] args) 

    { 
     new GameWords() ; 

    } 

} 

答えて

1

短い答えはありませんが、APIは自分自身が望むサイズを計算することができます。

長い答えは、ウィンドウの一般的な推奨事項として

public GameWords() 
{ 
    setTitle (" Word Order Game ") ; 
    setLayout (new FlowLayout()) ; 
    setDefaultCloseOperation (EXIT_ON_CLOSE) ; 
    createContent() ; 
    pack(); 
    setVisible (true) ; 
} 

public void createContent() 
{ 
    JLabel heading = new JLabel (" Fun With Words ") ; 
    heading.setFont (heading.getFont().deriveFont (26f)); 
    JLabel h1 = new JLabel (" Hey Kids! Want to prictice your typing and word-ordering Skills ? \n") ; 
    add (heading) ; 
    add (h1) ; 


} 

のサイズを計算するためにサイズを優先コンテナを使用する、setSizeを使用する代わりにpackを使用していない、あなたが直接及ぶべきではないですJFrameから、あなたはクラスに新しい機能を追加しておらず、1つのユースケースにあなた自身をロックしています。一般的な推奨事項として、JPanelから拡張し、使用するコンテナにこれを追加することをお勧めします。

+0

これはうまくいきました。しかし、パックを使用すると、なぜ動作するのか教えてください。私の医者が私に助けてくれてありがとう^^^ –

+0

JFrameでpack()を呼び出すと、JFrameは子供たちに(再帰的に)好みのサイズを尋ね、FlowLayoutを指定しているので、JFrameは子どもを好みの大きさで左から右に出す。しかし、@MadProgrammerのアドバイスに耳を傾け、そのメソッドの1つをオーバーライドしない限り、JFrameからサブクラス化しないでください。 JPanelをサブクラス化する必要はありません。なぜなら、JPanelには機能を追加していないからです。 JLabelを含むJPanelを作成し、JFrameを作成してそれにパネルを追加するだけです。 – FredK

+0

@Mj ___ 3フレッドが言っているように、 'pack'はコンテンツの好みのサイズに基づいて、コンテンツの周りにフレームを「パック」します。この情報は、使用されたさまざまなレイアウトマネージャによって計算されます – MadProgrammer

関連する問題