java - 我如何使用这个 Java GUI API 来绘制东西?

标签 java swing user-interface paintcomponent drawstring

我的导师定义了this图形API。

这非常简单,但我现在花了一两个小时试图找出如何显示简单的图形操作。

所以我有一个 T 类,它扩展了 TopLevel,它是我的主框架。我还有一个 Pad P,它扩展了 Pad,这是其 PaintComponent 方法的主体:

@Override
protected void paintComponent(Graphics2D g) {
    super.paintComponent(g);
    g.drawString("Hello", 0, 0);
    g.fill(new Rectangle(5, 5));
    repaint(); //(Probably don't need)
}

然后我调用 T.add(P),(我也调用 T.addButton(..)T.display(true) code>。当我运行应用程序时,我会看到一个空 Canvas ,其中包含我创建的按钮。

感谢任何帮助。

最佳答案

绘制文本并不像你想象的那么简单。

y 位置代表字体的基线(大多数文本所在的点。还有一条像样的线,位于基线下方的字符将延伸到该位置(例如“g”和“p”等字符)。

字体也有上升。这是基线以上典型字符的“高度”(显然不包括下降)

enter image description here

图片来自Measuring Text

为了正确绘制文本,您必须始终将上升添加到 y 位置...

FontMetrics fm = g.getFontMetrics();
g.drawString("Hello", 0, fm.getAscent());

您也可能会丢失 repaint 调用,这将导致重绘管理器(最终)一遍又一遍地调用您组件的 paint 方法。 .再次...

在 Swing 中,Graphics 通常被设置为使颜色成为组件的前景色。为了确定起见,您可能需要尝试更改颜色。

在尝试绘制任何内容之前,请尝试使用类似 g.setColor(Color.RED); 的内容。

关于java - 我如何使用这个 Java GUI API 来绘制东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13666335/

相关文章:

javascript - 在页面加载时显示加载器 无 AJAX

java - 自定义链接列表中的 JTable 数据存在问题

java - 清除后 Eclipse 不释放控制台(日志)内存

java - 是否递增运算符,例如 count++;在本地存储 volatile 数据线程?

java - 与 JPanel 不同对象中的字体尺寸

java - 如何从动态创建的 JTable 中获取值

java - 将文本设置为随机颜色和不透明度 javaFX

java - gridbaglayout 中的 JTextfield 全宽

javascript - 启用和禁用 ionic 中的输入字段

java - 将 arraylist 添加到 Jlist