【问题标题】:paintComponent isn't painting anything?paintComponent 没有画任何东西?
【发布时间】:2014-05-20 09:57:00
【问题描述】:

我无法使用 actionListener 和paintComponent 绘制任何东西。我很确定我的图像名称/路径是正确的。我做错了什么?

JApplet "Runner.java"

public class Runner extends JApplet{

    public void init(){
        World world = new World();
        Container screen = this.getContentPane();
        screen.add(world);
        setSize(1200, 800);
        repaint();
    }
}

“World.java”的一部分

protected ArrayList<WorldObject> allStillObjects = new ArrayList<WorldObject>();
protected ArrayList<MovableObject> allMovableObjects = new ArrayList<MovableObject>();
protected ArrayList<WorldObject> screenStillObjects = new ArrayList<WorldObject>();
protected ArrayList<MovableObject> screenMovableObjects = new ArrayList<MovableObject>();

public World(){
    this.setPreferredSize(new Dimension(SCREEN_WIDTH, SCREEN_HEIGHT));
    this.setBackground(new Color(255,255,255));
    this.setFocusable(true);
    this.setFocusTraversalKeysEnabled(false);

    this.addObject(new Card(this, "Two of Clubs", 0, 0, "card_two_c.png"));

    timer = new Timer(60, new ClickListener());
    timer.start();
}

public void addObject(WorldObject obj){
    if(obj instanceof MovableObject){
        this.allMovableObjects.add((MovableObject)obj);
        if(isOnScreen(obj))
            this.screenMovableObjects.add((MovableObject)obj);  
    }else{
        this.allStillObjects.add(obj);
        if(isOnScreen(obj))
            this.screenStillObjects.add(obj);
    }
}

public void paintComponent(Graphics g){
    super.paintComponent(g);
    for(WorldObject obj : this.screenStillObjects)
        obj.paintComponent(g);
    for(MovableObject obj : this.screenMovableObjects)
        obj.paintComponent(g);
}

private class ClickListener implements ActionListener{

    public void actionPerformed(ActionEvent e){    
         repaint();
    }
}

“ImageObject.java”

protected ImageIcon pic;

public ImageObject(World world, String name, int worldX, int worldY, String imageName){
    super(world, name, worldX, worldY);
    URL imgURL = getClass().getResource("images/" + imageName);
    pic = new ImageIcon(imgURL);

    this.width = pic.getIconWidth();
    this.height = pic.getIconHeight();
}

public void paintComponent(Graphics g){
    super.paintComponent(); //doesn't work with or without this line
    pic.paintIcon(world, g, this.getWorldX(), this.getWorldY());
}

如果这里的代码不够,我可以添加更多

编辑:使用 JApplet 的最佳选择是什么? World 扩展 JPanel,WorldObject 扩展 JPanel,ImageObject 扩展 WorldObject,MovableObject 扩展 ImageObject,Card 扩展 MovableObject

我在上面添加了 addObject 的方法。

【问题讨论】:

  • 为了尽快获得更好的帮助,请发布MCVE(最小完整且可验证的示例)。
  • 为什么要编写小程序?如果是由于规范。老师请发给Why CS teachers should stop teaching Java applets
  • 特别是显示“World”和“ImageObject”是否真的扩展了JComponent类(否则,paintComponent没有意义......),以及addObject方法的样子.
  • @Marco13 MCVE 中涵盖的所有内容(根据定义)..

标签: java swing actionlistener paintcomponent repaint


【解决方案1】:

谢谢你的回答,呃,cmets!他们非常有帮助。我去更改了我的程序,使它使用 JFrame 而不是 JApplet,经过一番摆弄,得到了要打印的图像。从那里我能够恢复到 JApplet 并且它可以工作!仍然不确定我最初的问题是什么:|

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    相关资源
    最近更新 更多