2015-06-25 17 views
0

我有得到這個代碼正常運行的問題,增加字體大小顯示短語。它編譯並且最初框架顯示正確。問題是,當我通過最大化或拖動框架的一側來手動重新調整框架大小時,文本消失。我正在使用jGRASP,不確定這是否是問題。代碼似乎對我有意義,就像我說的那樣,它編譯(我知道並不一定是正確的)。我仍然是一個新手,所以如果任何人都能指出我正確的方向,我會非常感激。JAVA,在一幀

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

public class JFontSizes extends JFrame { 
    int x = 5; 
    int y = 50; 
    String homework = "This is the first homework assignment"; 
    public JFontSizes() { 
     super("Increasing Font Sizes"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
    } 
    public void paint(Graphics brush) { 
     super.paint(brush); 
     // This works sometimes. I am not sure if it is a jGRASP issue or something else. 
     // If I resize the frame, the text disappears, and I cannot get the text to start at the top of the frame 
     for(int n = 6; n<= 20; ++n) { 
     brush.setFont(new Font("Serif", Font.PLAIN, n)); 
     brush.drawString(homework, x, y); 
     y += 15; 
     } 
    }    
    public static void main(String[] args) { 
     JFontSizes frame = new JFontSizes(); 
     frame.setSize(400, 500); 
     frame.setVisible(true);  
    } 
} 
+0

它一般不提倡直接畫到框架,而是使用了'JPanel'並使用它通過覆蓋其'paintComponent'方法進行自定義的繪畫,見[演出風俗繪畫(http://docs.oracle .COM/JavaSE的/教程/ uiswing /繪畫/)瞭解更多詳情 – MadProgrammer

回答

1

當第一次調用paint()時,y的值是5.並且它在循環中遞增。所以,離開paint()方法之前,它的價值將是275

但是,當你調整你的框架油漆()被再次調用,這一次y的值是275,當brush.drawString(homework, x, y);被稱爲homework在275px底部印從左上角。

public void paint(Graphics brush) { 
    y = 50; 
    .... 

編輯:
正如評論說camickr你應該重寫paintComponent(...)而不是paint(...),直到你有一些特殊原因覆蓋

所以,你需要做的是什麼,每次重新初始化ÿ塗料()。
你是說你是不是能夠打印在頂部(即使是在開頭)文本,然後那是因爲你曾與50這意味着該文本將在50像素從上可以得出初始化y。

+1

回答爲什麼畫消失(+1)。但是,通過覆蓋JPanel的'paintComponent()'方法完成繪製,然後將面板添加到框架。 '我不能讓文字在frame'你告訴它以50開始的頂部開始你應該從0開始。然後,你應該使用'Graphics.getFontMetrics()'方法。 FontMetrics類將給出Font的最大高度。然後在繪製字符串之前,將此值添加到y值。現在所有的字體將被均勻地塗在面板上。 – camickr