首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未调用paintComponent

未调用paintComponent
EN

Stack Overflow用户
提问于 2012-10-14 18:34:54
回答 2查看 1K关注 0票数 1

这里的代码应该创建一个窗口,然后在上面绘制一个多边形。

代码语言:javascript
复制
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()

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-14 18:38:49

您需要在JFrame中添加Drawer组件

代码语言:javascript
复制
Drawer drawer = new Drawer();
con.add(drawer);

不需要显式调用paintComponent。此外,在Drawer组件中调用repaint()也是不必要的。

上面的代码会替换pane JPanel,因此您可能需要重新考虑框架的布局。

票数 3
EN

Stack Overflow用户

发布于 2012-10-14 18:39:27

您创建了一个名为Drawer的新JComponent,它在本身的上执行绘图。因此,您必须将它的一个实例添加到框架中。

代码语言:javascript
复制
Drawer drawer = new Drawer();
con.add(drawer);

如果您不更改组件上绘制的内容,则不需要手动调用repaint()。Swing框架将为您调用它,例如当窗口大小发生变化时。

此外,类名应该以大写字母开头。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12881415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档