0

我的导师已经为图形定义了这个API。

这很简单,但我现在花了一两个小时试图弄清楚如何显示简单的图形操作。

所以我有一个扩展 TopLevel 的 T 类,它是我的主框架。我还有一个扩展 Pad 的 Pad P,这是它的 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(..)and T.display(true)。当我运行应用程序时,我看到一个带有我创建的按钮的空画布。

任何帮助表示赞赏。

4

2 回答 2

2

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

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

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

在此处输入图像描述

来自测量文本的图像

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

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

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

在 Swing 中,Graphics通常将颜色设置为组件的前景色。您可能想尝试更改颜色以确定。

g.setColor(Color.RED);在尝试绘制任何东西之前尝试使用类似的东西。

于 2012-12-02T04:42:31.603 回答
0

T.setVisible(true); // 构建后

于 2012-12-02T05:18:55.503 回答