2016-09-05 7 views
0

愚かな質問かもしれませんが、画像に示すように「メインフレームクラス」の構文を理解できませんでした。 Here, the setStringListener method is called from toolbar reference. But the syntax used inside the circular bracket is quite weird to me. I usually have parameters like strings or reference inside the call method. I did not understand how JButton will call this method. This programms works fine. I jst dont understand that partソースコード全体が以下に入力されています。あなたは、本質的にあなたの​​3210メソッド内newインターフェースを作成しているのでメソッドとJButtonの呼び出しについて

public class App { 

public static void main(String[] args) { 
    SwingUtilities.invokeLater(new Runnable(){ 
     public void run() { 

      new MainFrame(); 
     } 
    }); 
}} 




public class MainFrame extends JFrame{ 
private TextPanel textPanel; 
private Toolbar toolbar; 
public MainFrame(){ 
    super("Hello World"); 
    setLayout(new BorderLayout()); 
    toolbar =new Toolbar(); 
    textPanel=new TextPanel(); 
    toolbar.setStringListener(new StringListener(){    
     public void textEmitted(String text){ 
      textPanel.appendText(text); 
     } 
    }); 

    add(toolbar,BorderLayout.NORTH); 
    add(textPanel,BorderLayout.CENTER); 
    setSize(600, 500); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 
}} 




public class TextPanel extends JPanel { 
private JTextArea textArea; 

public TextPanel(){ 
    textArea=new JTextArea(); 

    setLayout(new BorderLayout()); 
    add(new JScrollPane(textArea),BorderLayout.CENTER); 
} 

public void appendText(String text){ 
    textArea.append(text); 
}} 



public class Toolbar extends JPanel implements ActionListener { 
private JButton helloButton; 
private JButton goodbyeButton; 
private StringListener textListener; 
public Toolbar(){ 
    helloButton=new JButton("Hello"); 
    goodbyeButton=new JButton("Goodbye"); 

    helloButton.addActionListener(this); 
    goodbyeButton.addActionListener(this); 


    setLayout(new FlowLayout(FlowLayout.LEFT)); 
    add(helloButton); 
    add(goodbyeButton); 
} 
public void setStringListener(StringListener listener){ 
    this.textListener=listener; 
} 
public void actionPerformed(ActionEvent e) { 
    JButton clicked=(JButton)e.getSource(); 
    if (clicked==helloButton){ 
     if (textListener!=null){ 
      textListener.textEmitted("Hello\n"); 
     } 
    } 
    else if(clicked==goodbyeButton){ 
     if (textListener!=null){ 
      textListener.textEmitted("goodBye\n"); 
     }   
    }  
}} 

、インターフェイスがStringListener

public interface StringListener { 
public void textEmitted(String text); 

}

+0

https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html#syntax-of-anonymous-classes –

答えて

0

である、あなたは、実装を持っている必要があります。


あなたはすでに textEmitted()メソッドの実装とのインターフェイスを定義したことを想像することができ

:代わりに別途、このインタフェースを定義するには、中に新しいStringListenerを作成することができ、今

public class MyImplementation implements StringListener { 

    @Override 
    public void textEmitted(String text) { 
     // Do stuff here 
    } 
} 

あなたMainFrameクラス:

StringListener myImplementation = new StringListener() { 

    @Override 
    public void textEmitted(String text) { 
     // Do stuff here 
    } 
}; 

toolbar.setStringListener(myImplementation); 

だから何あなたは「再やっbasicallですyの上のコードと同じですが、別にそれを定義するのではなく、あなたのメソッド内StringListenerを作成:

toolbar.setStringListener(new StringListener() { 
    @Override 
    public void textEmitted(String text) { 
     // Do stuff here 
    } 
}); 

私は例が助けを願っています。

まだわからない場合は、Java tutorial for Anonymous Classesで読むことを強くおすすめします。

関連する問題