这里的代码应该创建一个窗口,然后在上面绘制一个多边形。
import java.awt.*;
import javax.swing.*;
public class gui extends JComponent {
gui(String title){
JPanel pane = new JPanel();
JFrame frame = new JFrame(title);
Container con = frame.getContentPane();
con.add(pane);
frame.setBounds(100,100,500,500);
frame.setVisible(true);
}
public static void main(String[] args){
gui myGUI = new gui("test");
new Drawer();
repaint();
}
}
class Drawer extends JComponent {
public Drawer() {
System.out.println("drawer");
repaint();
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("drawerpC");
Point p1 = new Point(400, 100);
Point p2 = new Point(100, 300);
Point p3 = new Point(200, 400);
int[] xs = { p1.x, p2.x, p3.x };
int[] ys = { p1.y, p2.y, p3.y };
Polygon triangle = new Polygon(xs, ys, xs.length);
g.setColor(new Color(255,255,255));
g.fillPolygon(triangle);
}
}窗口已创建,但未调用paintComponent()。
public Drawer()中的repaint()似乎什么也没做。
如何调用paintComponent()
发布于 2012-10-14 18:38:49
您需要在JFrame中添加Drawer组件
Drawer drawer = new Drawer();
con.add(drawer);不需要显式调用paintComponent。此外,在Drawer组件中调用repaint()也是不必要的。
上面的代码会替换pane JPanel,因此您可能需要重新考虑框架的布局。
发布于 2012-10-14 18:39:27
您创建了一个名为Drawer的新JComponent,它在本身的上执行绘图。因此,您必须将它的一个实例添加到框架中。
Drawer drawer = new Drawer();
con.add(drawer);如果您不更改组件上绘制的内容,则不需要手动调用repaint()。Swing框架将为您调用它,例如当窗口大小发生变化时。
此外,类名应该以大写字母开头。
https://stackoverflow.com/questions/12881415
复制相似问题