2012-12-17 95 views
2

我試圖在JLabel中顯示自定義字體,但是當我創建它時,它顯示爲非常小的文本。我甚至不知道是否使用了我指定的字體,因爲文字太小了。這裏是the font that I used。那麼我在做什麼導致字體太小?自定義JLabel字體太小

package sscce; 

import java.awt.Font; 
import java.awt.FontFormatException; 
import java.io.File; 
import java.io.IOException; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class Main extends JFrame{ 

    public Main(){ 
     this.setSize(300, 300); 
     this.setResizable(false); 
     this.setLocationRelativeTo(null); 
     this.setVisible(true); 
     this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 


     GameFont fnt = new GameFont("/home/ryan/Documents/Java/Space Shooters/src/media/fonts/future.ttf", 20); 
     Label lbl = fnt.createText("Level 1 asdf sadf saf saf sf "); 

     this.add(lbl); 
    } 

    public static void main(String[] args){ 
     Main run = new Main(); 
    } 

    public class GameFont{ 

     protected Font font; 

     public GameFont(String filename, int fontSize){ 
      try{ 
       File fontFile = new File(filename); 
       font = Font.createFont(Font.TRUETYPE_FONT, fontFile); 
       font.deriveFont(fontSize); 
      }catch(FontFormatException | IOException e){ 
      } 
     } 

     public Label createText(String text){ 
      Label lbl = new Label(font); 
      lbl.setText(text); 
      return lbl; 
     } 
    } 

    public class Label extends JLabel{ 

     public Label(Font font){ 
      this.setFont(font); 
     } 
    } 
} 

回答

3

請再看一下Font API,deriveFont(...)方法。你想在一個浮動,不是INT的大小來傳遞,因爲如果一個int參數傳遞中,該方法將期望這將意味着設置字體的風格(粗體,斜體,下劃線),而不是它的大小。您還需要使用由deriveFont(...)方法返回的的Font

所以更改此設置:

public GameFont(String filename, int fontSize){ 
     try{ 
      File fontFile = new File(filename); 
      font = Font.createFont(Font.TRUETYPE_FONT, fontFile); 
      font.deriveFont(fontSize); 
     }catch(FontFormatException | IOException e){ 
     } 
    } 

這樣:

public GameFont(String filename, float fontSize){ 
     try{ 
      File fontFile = new File(filename); 
      font = Font.createFont(Font.TRUETYPE_FONT, fontFile); 
      font = font.deriveFont(fontSize); 
     }catch(FontFormatException | IOException e){ 
      e.printStackTrace(); // **** 
     } 
    } 

另外,不要不斷忽略就像你正在做例外!

+0

所以我把它改成了一個浮點數,但它仍然很小。 –

+0

@RyanNaddy:查看編輯。您需要使用從deriveFont方法返回的Font。 –

+0

好的,修好了!謝謝!我沒有重新分配變量! –