2016-04-06 19 views
0

次のコードのうちの1つがコンパイルされ、もう1つがコンパイルされない理由を理解できません。これらの2つのコードの違いは何ですか?

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

そして、ちょうど罰金コンパイル1:

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:

コンパイルしないものは、(コンパイラは、メソッドKeyBidings()は戻り値の型を必要と言う)Iコンストラクタとメソッドの違いはわかりませんでしたが、別の問題が発生しました: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

これらのスニペットのそれぞれに含まれるクラスの名前は何ですか?彼らは同じクラスですか? 1つはおそらくクラスの中で 'KeyBindings'(働いているもの)と呼ばれているのでしょうか? –

+0

@CaptainMan投稿を編集し、両方のクラスのソースコードを編集しました。 –

答えて

2

最初のものは、いくつかの他のクラスの欠落戻り型と方法、​​であるのに対し、第二の一方は、KeyBidingsというクラスのコンストラクタです。

the tutorial about constructorsを読んでください。

コンパイラは、タイトルが言うように、メソッドがパブリックではないとは言いません。それは戻り型を持たなければならないと言います。それは全く違う。

+0

コンストラクタに関するチュートリアルをありがとうが、コンパイルすると、次のエラーが表示される:https://gyazo.com/cd3c21a8562589451814903febaf89fe What'sこの場合の2つのコードの違いは? –

+0

これはまったく異なる質問です。エラーメッセージを読んでください。もう一度読む。それが何を意味するのか理解してみてください。それが参照する行を読んでください。あなたのコードをチェックしてください:メッセージが抽象を参照するクラスですか?それはActionListenerを実装していますか?私たちはあなたのコードを知らないので、もっと助けるのは難しいです。しかし、スウィングを使用するのは早すぎるという気持ちがあります。これはかなり複雑です。基本を学び、GUIを含まない単純な演習で練習してください:クラス、インターフェース、メソッド、コンストラクタ、内部クラスは何ですか?これは、Swingを使用する前にうまくいきません。 –

+0

投稿を編集し、ソースコードへのリンクを追加しました。私は基本のほとんどを知っていますが、オラクル社のドキュメントのアクションに関するチュートリアルではあまり役に立たなかったので、ここではいくつかの詳細が欠落しています。 –

関連する問題