我遇到了使此代码正常运行的问题。它编译并最初正确显示框架。问题是当我通过最大化或通过拖动框架的一侧手动重新调整框架大小时,文本消失。我正在使用jGRASP,不确定这是不是问题。代码似乎对我有意义,就像我说的,它编译(我知道这不一定是正确的)。我仍然是新手,所以如果有人能指出我正确的方向,我会非常感激。
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 :(得分:1)
当第一次调用paint()时,y的值为5.并且它在循环中递增。所以在离开paint()之前它的值将是275.
但是当你调整帧的大小时,再次调用paint(),这次y的值为275,当调用brush.drawString(homework, x, y);
时,homework
打印在左上角275px的底部。
所以你需要做的就是每次重新初始化y:
public void paint(Graphics brush) {
y = 50;
....
编辑:
正如camickr所评论的那样,您应该覆盖paintComponent(...)
而不是paint(...)
,直到您有一些特定的理由来覆盖paint()。
你的意思是你无法在顶部打印文本(即使在开头),那是因为你用50初始化了y。这意味着文本将从顶部以50px绘制。