目前我只是在学习一些基础教程。当前的人想要一个图形程序,可以用红色绘制您的名字。我试图制作一个扩展 JComponent 的 NameComponent 类,并使用 drawString() 方法来执行此操作:
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.awt.Color;
import javax.swing.JComponent;
public class NameComponent extends JComponent {
public void paintMessage(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.RED);
g2.drawString("John", 5, 175);
}
}
并使用一个使用 JFrame 显示名称的 NameViewer 类:
import javax.swing.JFrame;
public class NameViewer {
public static void main (String[] args) {
JFrame myFrame = new JFrame();
myFrame.setSize(400, 200);
myFrame.setTitle("Name Viewer");
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
NameComponent myName = new NameComponent();
myFrame.add(myName);
myFrame.setVisible(true);
}
}
...但是当我运行它时,框架出现空白!谁能告诉我我在这里做错了什么?
非常感谢!
最佳答案
您需要覆盖方法 paintComponent
而不是 paintMessage
。在方法上添加 @Override
注释将表明 paintMessage
不是 JComponent
的标准方法。此外,您可能希望减少 drawString
中的 y 坐标,因为由于 JFrame
的额外装饰尺寸,文本目前不可见。最后记得调用super.paintComponent
重新绘制组件的背景。
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.RED);
g2.drawString("John", 5, 100);
}
关于java - 尝试使用 drawString 方法打印名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13825582/