【发布时间】: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