2017-03-14 84 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是相當能夠計算自己所需的大小。

較長的答案是,不要使用setSize,使用pack相反,它使用的容器首選大小來計算窗口

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) ; 


} 

通常建議的大小,你不應該直接延伸從JFrame開始,您並沒有爲課程添加任何新功能,而是將自己鎖定在一個用例中。作爲一般性建議,您應該從JPanel開始,然後將其添加到您要使用的任何容器中

+0

好,現在正在工作..但是您能否告訴我爲什麼當我們使用包裝時,它工作正常?因爲我的醫生很好的問我,謝謝你的幫助^ _^ –

+0

當你在JFrame上調用pack()時,JFrame會遞歸地詢問子對象的大小,並且由於你指定了一個FlowLayout,所以JFrame設置以自己喜歡的尺寸從小到大排列其子女。但是你應該聽從@MadProgrammer的建議,並且不要從JFrame獲得子類,除非你重寫了它的一個方法。在你的情況下,你甚至不需要繼承JPanel,因爲你並沒有增加任何功能。只需創建一個包含JLabel的JPanel,然後創建一個JFrame並將面板添加到它。 – FredK

+0

@Mj ___ 3正如fred所說,'pack'會根據內容大小的大小將內容框架「打包」。這些信息是由各種佈局管理人員使用的 – MadProgrammer