2015-01-07 3 views
0

모델보기 컨트롤러 디자인 패턴의 컨텍스트에서 이벤트를 별도로 처리하려고합니다. 그래서 JFrame을 확장하는 클래스가 있다고 가정 해 보겠습니다.JAVA 폼 감지 변경

import java.awt.EventQueue; 
import java.awt.GridBagConstraints; 
import java.awt.GridBagLayout; 
import java.awt.HeadlessException; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JSpinner; 
import javax.swing.SpinnerNumberModel; 


public class Example2 extends JFrame{ 
    private JSpinner spinner1; 
    private JSpinner spinner2; 
    private JSpinner spinner3; 
    private JSpinner spinner4; 

    private JLabel lbl1; 
    private JLabel lbl2; 
    private JLabel lbl3; 
    private JLabel lbl4; 

    private JButton button; 

    public Example2() { 
     setLayout(new GridBagLayout()); 
     initComponents(); 
     buildFrame(); 
     pack(); 
    } 



private void initComponents(){ 
    lbl1 = new JLabel("Number 1:"); 
    lbl2 = new JLabel("Number 2:"); 
    lbl3 = new JLabel("Number 3:"); 
    lbl4 = new JLabel("Number 4:"); 

    button = new JButton("O.K"); 
    spinner1 = new JSpinner(new SpinnerNumberModel(0,Integer.MIN_VALUE, Integer.MAX_VALUE, 1)); 
    spinner2 = new JSpinner(new SpinnerNumberModel(0,Integer.MIN_VALUE, Integer.MAX_VALUE, 1)); 
    spinner3 = new JSpinner(new SpinnerNumberModel(0,Integer.MIN_VALUE, Integer.MAX_VALUE, 1)); 
    spinner4 = new JSpinner(new SpinnerNumberModel(0,Integer.MIN_VALUE, Integer.MAX_VALUE, 1)); 

    button = new JButton("O.K"); 

} 

private void buildFrame(){ 
    GridBagConstraints gc = new GridBagConstraints(); 
    gc.gridx = 0; 
    // First row 
    gc.gridy = 0 ; 
    getContentPane().add(lbl1,gc); 
    // Next row 
    gc.gridy++ ; 
    getContentPane().add(lbl2,gc); 
    // Next row 
    gc.gridy++ ; 
    getContentPane().add(lbl3,gc); 

    // Next row 
    gc.gridy++ ; 
    getContentPane().add(lbl4,gc); 

    gc.gridy = 0; 
    gc.gridx = 1; 

    getContentPane().add(spinner1,gc); 

    // Next row 
    gc.gridy++ ; 
    getContentPane().add(spinner2,gc); 
    // Next row 
    gc.gridy++ ; 
    getContentPane().add(spinner3,gc); 

    // Next row 
    gc.gridy++ ; 
    getContentPane().add(spinner4,gc); 


    // Next row 
    gc.gridy++; 
    gc.gridx = 0 ; 

    getContentPane().add(button,gc); 


} 

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

     @Override 
     public void run() { 
      new Example2().setVisible(true); 
     } 
    }); 
} 



} 

별도의 이벤트 처리를위한 방법이 있습니까? 클래스 마녀를 만드는 정렬은 Example2 클래스의 이벤트를 처리합니다. 그런 식으로.

button.addActionListener(new MyActionListener()); 

경우 :

button.addActionListener(new ActionListener() { 

     @Override 
     public void actionPerformed(ActionEvent ae) { 
      System.out.println("processing"); 
     } 
    }); 
.......... 
spinner1.addChangeListener(new ChangeListener() { 

    @Override 
    public void stateChanged(ChangeEvent ce) { 
     } 
}); 
etc. 

답변

2

public class MyActionListener implements ActionListener 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     System.out.println(...); 
    } 
} 

그런 다음 사용 ActionListener 인터페이스를 클래스를 구현하는 클래스를 만듭니다 대신 예 2 클래스 내부 처리 이벤트

public class Example2EventsManager { 
} 

당신은 요 싶어요. 여러 인터페이스를 구현할 수 있습니다.

public class MyListener implements ActionListener, ChangeListener 
...