2016-04-06 19 views
0

Aşağıdaki kodlardan birinin neden derlendiğini ve diğerinin neden olmadığını anlayamıyorum.Bu iki bit kodu arasındaki fark nedir?

public KeyBidings(){ 
    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); 
} 

Ve sadece iyi derler: Biri:

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); 
} 

EDIT:

derleme değil bir (Derleyici yöntemi KeyBidings() bir dönüş türü ihtiyacı var) Ben Bir kurucu ve bir yöntem arasındaki farkı bilmiyordum ama şimdi başka bir sorunum var: https://gyazo.com/cd3c21a8562589451814903febaf89fe

Burada sorun nedir? Her iki sınıf için de kaynak kodları ekledim.

Kaynak Kod 1: http://pastebin.com/vwNtJZEG Kaynak Kod 2: İlki başka sınıfın, bir eksik dönüş türü ile bir yöntemdir oysa http://pastebin.com/nL4SbtkM

+2

Ayrıca, [Java Adlandırma Kuralları] 'nı okuduğunuzdan emin olun (http://www.oracle.com/technetwork/java/codeconventions-135099.html): yöntemler küçük harfle başlamalıdır. Bu, bir yöntem ve bir kurucu arasında ayrım yapmayı kolaylaştırır (muhtemelen başka bir sınıftan kopyalanmış). – Kenney

+0

Bu parçacıkların her birinin sınıfının adı nedir? Aynı sınıfta mı? Biri belki de 'KeyBindings' denen bir sınıfta, diğeri de değil midir? –

+0

@CaptainMan Yayını düzenledim ve her iki sınıf için kaynak kodları ekledim. –

cevap

2

ikincisi, adında bir sınıf KeyBidings yapıcısı olduğunu.

the tutorial about constructors'u okuyun.

Derleyicinin, başlığınızın söylediği gibi yöntemin herkese açık olmadığını söylemediğini unutmayın. Bir dönüş türüne sahip olması gerektiğini söylüyor. Bu oldukça farklı.

+0

Kurucular hakkında eğitici için teşekkürler, ancak derlerken aşağıdaki hatayı aldım: https://gyazo.com/cd3c21a8562589451814903febaf89fe Bu durumda iki kod arasındaki fark? –

+0

Bu tamamen farklı bir soru. Hata mesajını oku. Tekrar oku. Ne anlama geldiğini anlamaya çalış. Hangi çizgiye başvurduğunu okuyun. Kodunuzu kontrol edin: mesajın soyut olarak ifade ettiği sınıf mı? ActionListener uygular mı? Kodunuzu bilmediğimizi unutmayın, bu yüzden daha fazla yardımcı olmak zordur. Ama oldukça karmaşık olan Swing'i kullanmanın çok erken olduğunu hissediyorum. Önce temelleri öğrenin ve bir GUI içermeyen basit egzersizlerle pratik yapın: sınıflar, arayüzler, yöntemler, yapıcılar, iç sınıflar nelerdir? Bu, Swing'i kullanmadan önce anlaşılmalıdır. –

+0

Yayını düzenledim ve kaynak kodlara bağlantılar ekledim. Temel bilgilerin çoğunu biliyorum ama oradaki ve burada birkaç detayı kaçırdığımdan beri oracle belgelerinde yapılan eylemler çok fazla yardımcı olmadı. –

İlgili konular