經過一番閱讀後,我回來試圖讓這些圖紙移動。我遇到困難的是計時器從未開始 - 當我嘗試運行initGame方法時,它告訴我我無法從靜態上下文中引用它。如果不是主循環,那麼我從哪裏開始呢?我已經能夠使它在drawComponent中開始,但是這只是在每次繪製時創建一個新的計時器,這是不好的。如何從靜態上下文初始化重繪計時器?
主要類:
public class Test2 extends JFrame {
private JPanel paintPanel;
public Test2() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setMinimumSize(new Dimension(800, 600));
paintPanel = new PaintPanel();
getContentPane().add(paintPanel, BorderLayout.CENTER);
pack();
}
class PaintPanel extends JPanel implements ActionListener {
private List<Shape> gladiators;
private Shape mouseOverShape=null;
private Timer timer;
public void initGame() {
timer = new Timer(50, this);
timer.start();
}
@Override
public void actionPerformed(ActionEvent e) {
repaint();
// change object location here
System.out.println("Repainting");
}
public PaintPanel(){
super();
// Create my Gladiator objects and add them here?
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
for (Shape s : gladiators){
g2.draw(s);
}
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
Test2 gamePanel = new Test2();
gamePanel.setVisible(true);
PaintPanel.initGame();
}
});
}
}
角鬥士類:
public class Gladiator implements Drawable{
int[] location = new int[] {25,25};
public void Draw(Graphics g){
// draw out the shapes which constitute each "gladiator"
}
}
我還包括了一些報價線說明,我認爲其他的動作去。我很感謝任何有關這些或其他概念的重大問題的反饋意見。謝謝大家!
編輯:
繼鰻魚建議氣墊船全讓我感動的方法的聲明從主要方法爲Test2的方法裏面裏面......我也改變了一個大寫錯誤。它現在看起來像這樣:
public Test2() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setMinimumSize(new Dimension(800, 600));
paintPanel = new PaintPanel();
getContentPane().add(paintPanel, BorderLayout.CENTER);
pack();
paintPanel.initGame();
}
主要方法是相同的,減去「PaintPanel.initGame();」。
我得到一個無法找到initGame的符號錯誤。
第2編輯:
我想我的問題得到了回答。如果我仍然有疑問或者稍微回答一下,我會再做一次編輯。謝謝,氣墊船!
我在主要方法中調用它。爲了清楚起見,我將添加它。 –
@PeterF:查看編輯 –
好吧,我現在得到你在說的內容 –