如何使用这个JavaGUI API绘制东西?

如何使用这个JavaGUI API绘制东西?,java,swing,user-interface,paintcomponent,drawstring,Java,Swing,User Interface,Paintcomponent,Drawstring,我的导师为图形定义了API 这很简单,但我现在花了一两个小时试图弄明白如何让简单的图形操作显示出来 所以我有一个T类,它扩展了TopLevel,它是我的主框架。我还有一个Pad P,它扩展了Pad,这是paintComponent方法的主体: @Override protected void paintComponent(Graphics2D g) { super.paintComponent(g); g.drawString("Hello", 0, 0); g.fill

我的导师为图形定义了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)
。当我运行应用程序时,我看到一个带有我创建的按钮的空画布


非常感谢您的帮助。

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

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

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

来自

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

FontMetrics fm = g.getFontMetrics();
g.drawString("Hello", 0, fm.getAscent());
您还可能丢失
repaint
调用,这将导致重新绘制管理器(最终)一遍又一遍地调用组件的
paint
方法

在Swing中,
Graphics
通常设置为组件的前景色。您可能需要尝试更改颜色以确保正确


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

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

如何在顶部框架内指定焊盘的布局?我用空参数尝试过它:
新的LayoutSpec(“宽度”,20,“高度”,20);
1“…T扩展顶部框架”什么是
TopFrame
?我只看到2)这4个类中没有一个扩展任何AWT或Swing组件。@andrewhoson我的道歉是指TopLevel。关于AWT或Swing这4个类,你没有一个是正确的,我相信这些细节是要封装的;我一定会记住的。但在这一点上,它是关于得到任何东西来画画。我也有预感,我的东西被画成与背景相同的颜色,所以我看不见它们,但改变颜色并不会改变任何东西。愚蠢的想法,但是,添加一个
System.out.println(“绘画”)
paintComponent
方法中调用,只是为了确保它是begin调用的。您看到这个方法了吗?我想这就是
T.display(true)。
正在做的,但是我没有看到
setVisible