我现在正在阅读一些基本的教程。目前的人想要一个以红色绘制你的名字的图形程序。我试图创建一个扩展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);
}
}
并使用NameViewer类,它使用JFrame来显示名称:
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);
}
}
...但是当我运行它时,框架出现空白!谁能让我知道我在这里做错了什么?
非常感谢!
答案 0 :(得分:1)
您需要覆盖方法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);
}
答案 1 :(得分:0)
您需要在public void paintMessage(Graphics g){
之后添加此行:
super.paint(g);
这告诉Java使用超类(JComponent)绘制消息。
您还需要调用方法paintComponents()
而不是paintMessage()