import java.awt.*;
import javax.swing.JFrame;
public class GraphicsDemo1 extends Canvas
{
public void paint( Graphics g )
{
g.setColor(Color.green);
g.drawRect(50,20,100,200); // draw a rectangle
g.fillOval(160,20,100,200); // draw a filled-in oval
g.setColor(Color.blue);
g.fillRect(200,400,200,20); // a filled-in rectangle
g.drawOval(200,430,200,100);
g.setColor(Color.black);
g.drawString("Graphics are pretty neat.", 500, 100);
int x = getWidth() / 2;
int y = getHeight() / 2;
g.drawString("The first letter of this string is at (" + x + "," + y + ")", x, y);
}
public static void main( String[] args )
{
// You can change the title or size here if you want.
JFrame win = new JFrame("GraphicsDemo1");
win.setSize(800,600);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
GraphicsDemo1 canvas = new GraphicsDemo1();
win.add( canvas );
win.setVisible(true);
}
}
感谢。 awt和swing对我来说非常困惑。
答案 0 :(得分:3)
为什么要扩展画布?
因为曾经写过它的人选择这样做。只有那些从Component
扩展的类才能实际绘制到屏幕上,并且只有当它们附加到有效的可见窗口时
这个程序什么时候调用了油漆?
绘画是RepaintManager
的责任。它将决定何时需要重新绘制组件并在Event Dispatching Thread上安排重绘事件。这反过来会代表您调用(在您的情况下update
调用)paint
。
您可能希望阅读Painting in AWT and Swing以了解有关该主题的更多详情
答案 1 :(得分:1)
paint()。考虑将应用程序部分移出屏幕然后再移回。油漆将被调用重绘...
我想可以扩展一些不同的控件来实现相同的目标,基本上是创建一个自定义绘制的控件。扩展现有控件以获得在其表面上绘制,放置在JFrame中,自动重新绘制等的能力。