2016-04-06 442 views
0

我不明白爲什麼下面的一段代碼編譯而另一段沒有編譯。這兩位代碼有什麼區別?

不編譯一個(編譯器說的方法KeyBidings()需要返回類型):

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

這編譯就好了一句:

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

編輯:我不知道構造函數和方法之間的區別,但現在我有另一個問題:https://gyazo.com/cd3c21a8562589451814903febaf89fe

這裏有什麼問題?我已經在下面列出了兩個類的源代碼。

源代碼1:http://pastebin.com/vwNtJZEG 源代碼2:http://pastebin.com/nL4SbtkM

+2

另外請務必閱讀[Java命名約定](http://www.oracle.com/technetwork/java/codeconventions-135099.html):方法應該以小寫字母開頭。這使得更容易區分方法和構造函數(可能從另一個類複製粘貼)。 – Kenney

+0

這些代碼片段中的每個片段的名稱是什麼?他們在同一班嗎?有人可能在一個叫做「KeyBindings」的類中(工作中)而另一個不是? –

+0

@CaptainMan我編輯了這篇文章,幷包含了這兩個類的源代碼。 –

回答

2

第二個是一類命名KeyBidings的構造,而第一個是一種方法,用缺少返回類型,其他一些類的。

閱讀the tutorial about constructors

請注意,編譯器不會說該方法可能不公開,因爲您的標題說。它說它必須有返回類型。這是完全不同的。

+0

感謝有關構造函數的教程,但編譯時,我得到以下錯誤:https://gyazo.com/cd3c21a8562589451814903febaf89fe 什麼是這種情況下兩個代碼的區別? –

+0

這是一個完全不同的問題。閱讀錯誤消息。再讀一遍。試着弄清楚它的含義。閱讀它指的是哪一行。檢查你的代碼:該消息引用的類是抽象的嗎?它是否實現了ActionListener?請注意,我們不知道您的代碼,因此很難提供更多幫助。但我有這樣的感覺,現在對於使用Swing來說太早了,這很複雜。首先學習基礎知識,並使用不涉及GUI的簡單練習進行練習:什麼是類,接口,方法,構造函數,內部類。在使用Swing之前,這應該是不夠的。 –

+0

我編輯了帖子並添加了鏈接到源代碼。我知道大部分的基礎知識,但由於關於Oracle文檔的Action教程並沒有多大幫助,所以我在這裏和那裏忽略了一些細節。 –