2016-04-06 41 views
-2

Sınıftaki Eylemler'den birinin neden soyut ve diğer sınıftaki Eylemin neden olmadığını anlamakta zorlanıyorum.Bu eylem neden soyut değil?

Kaynak kod 1: (Hata derleme: https://gyazo.com/cd3c21a8562589451814903febaf89fe)

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Play extends JFrame{ 

Engine drawPanel = new Engine(); 
private int x = 0; 
private int y = 0; 

public int getX(){ 
    return x; 
} 
public int getY(){ 
    return y; 
} 

public Play(){ 
    Action rightAction = new AbstractAction(){ 
     public void actionPreformed(ActionEvent e){ 
      x+=10; 
      drawPanel.repaint(); 
     } 
    }; 
    Action leftAction = new AbstractAction(){ 
     public void actionPreformed(ActionEvent e){ 
      x-=10; 
      drawPanel.repaint(); 
     } 
    }; 

     InputMap inputMap = drawPanel.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW); 
     ActionMap actionMap = drawPanel.getActionMap(); 

    inputMap.put(KeyStroke.getKeyStroke("RIGHT"), "rightAction"); 
    actionMap.put("rightAction", rightAction); 
    inputMap.put(KeyStroke.getKeyStroke("LEFT"), "leftAction"); 
    actionMap.put("leftAction", leftAction); 

    add(drawPanel); 
    pack(); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setSize(640, 480); 
    setTitle("Game"); 
    setLocationRelativeTo(null); 
    setVisible(true); 
} 

public static void main(String[] args){ 

    EventQueue.invokeLater(new Runnable(){ 
     @Override 
     public void run(){ 
      new Play(); 
     } 
    }); 
} 
} 

Kaynak kodu 2: (sadece iyi derler kodu)

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class KeyBidings extends JFrame { 
int x = 0; 
int y = 0; 

DrawPanel drawPanel = new DrawPanel(); 

public KeyBidings(){ 
    Action rightAction = new AbstractAction(){ 
     public void actionPerformed(ActionEvent e) { 
      x +=10; 
      drawPanel.repaint(); 
     } 
    }; 

     InputMap inputMap = drawPanel.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW); 
     ActionMap actionMap = drawPanel.getActionMap(); 

    inputMap.put(KeyStroke.getKeyStroke("RIGHT"), "rightAction"); 
    actionMap.put("rightAction", rightAction); 

    add(drawPanel); 

    pack(); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    setVisible(true); 
} 

private class DrawPanel extends JPanel { 


    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.setColor(Color.GRAY); 
       g.fillRect(0, 0, getWidth(), getHeight()); 
     g.setColor(Color.GREEN); 
     g.fillRect(x, y, 50, 50); 
    } 

    public Dimension getPreferredSize() { 
     return new Dimension(400, 200); 
    } 
} 

public static void main(String[] args) { 
    EventQueue.invokeLater(new Runnable(){ 
     public void run(){ 
      new KeyBidings(); 
     } 
    }); 
} 
} 

cevap

1

ilk örnekte bir yazarak Çünkü hata:

actionPreformed 

yerine

olmalı
actionPerformed 
+0

Şimdi büyük aptal bir aptal gibi hissediyorum ama işe yaradı, teşekkürler! Bana izin verir vermez kabul edeceğim. –