尝试使用drawString方法打印名称

时间:2012-12-11 17:41:24

标签: java graphics drawstring

我现在正在阅读一些基本的教程。目前的人想要一个以红色绘制你的名字的图形程序。我试图创建一个扩展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);
    }
} 

...但是当我运行它时,框架出现空白!谁能让我知道我在这里做错了什么?

非常感谢!

2 个答案:

答案 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);
}

请参阅:Painting in AWT and Swing

答案 1 :(得分:0)

您需要在public void paintMessage(Graphics g){之后添加此行:

super.paint(g);

这告诉Java使用超类(JComponent)绘制消息。

您还需要调用方法paintComponents()而不是paintMessage()