java - 尝试使用 drawString 方法打印名称

标签 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);

    }
}

并使用一个使用 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);
}

参见:Painting in AWT and Swing

关于java - 尝试使用 drawString 方法打印名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13825582/

相关文章:

Python 碰撞检测,不在 pygame 中

C# Graphics.DrawString RectangleF 自动高度 : How to find that height?

java - 如何使您在 JColorChooser 中选择的颜色改变 JTextArea 中字体的颜色?

java - 从二进制文件中读取结构化数据的循环 - Java

html - 是否有任何 HTML 代码可以显示椭圆或圆角矩形?

algorithm - 获取和设置像素亮度的通用算法?

c# - 确定文本字符串中的行数?

Java Swing Graphics2D drawString 启动慢?

javascript - 如何用约束布局交换两个按钮的位置?

java - 为什么我不能创建像 java.basic 这样的包名称?