2014-10-30 3 views
0

두 가지 클래스에서 어려움이 있습니다 : 프로그램 클래스와 EventHandler 클래스.java. 이벤트 핸들러 인터페이스

프로그램 클래스는 "Ground"(배경 jpg가있는 창)와 "추가"버튼이있는 두 개의 별도 창을 만들어 꽃을 "Ground"에 추가합니다.

public class Program implements Runnable { 

    @Override 
    //implements interface 
    public void run() { 
     example1.Ground g; 
     g = new example1.Ground(); 
    // ground object 
     javax.swing.JFrame window = new javax.swing.JFrame("windowwithbutton"); 
     //window (JFRAME) 
     javax.swing.JPanel panel = new javax.swing.JPanel(); 
     //content (JPANEL) 
     javax.swing.JButton ab = new javax.swing.JButton("add"); 
     ab.addActionListener(new eventHandler()); 

이벤트 핸들러 클래스, 버튼 클래스 이벤트 핸들러의 객체를 생성 방법의 ActionListener 호출 "추가"

public class Eventhandler implements java.awt.event.ActionListener { 


@Override 

    public void actionPerformed(java.awt.event.ActionEvent e) { 

    example1.Flower flower; 
    flower = new example1.Flower(); 

모든 것이 잘 작동하지만 난 그렇게 할 때, 이벤트 핸들러에 코드의 조각을 추가하는 어려움이 버튼을 누르면 - 프로그램 클래스에 의해 생성 된 지상에 꽃을 만들어야합니다. 개체간에이 연결을 어떻게 설정해야합니까?

감사합니다 :)

+0

당신이 이벤트 핸들러는 추가 할 필요가 무엇인지에 대한 참조를해야 할 것입니다 ... 버튼을 사용하여 수행 할 수있는 작업 (즉, 플로우 추가)을 제공하고 구현하는 것을 고려하고 불필요하게 프레임 /지면을 드러내 기보다는 이벤트 핸들러에 전달하십시오. – MadProgrammer

+0

@markspace 그러나 'EventHandler'는 어떻게 생각합니까?). – MadProgrammer

+0

EventHandler 클래스에 코드를 추가하려고했지만 "추가"버튼을 누르면 cr이 추가됩니다. 또 다른 "Ground"창을 띄웁니다. 내가 이해 한대로 - 나는 프로그램 클래스에 의해 생성 된 Ground에 대한 참조를 추가해야하지만 어떻게 든 EventHandler 클래스에서 그것을 할 수 있습니까? – Jaye

답변

1
당신은 당신이하고 싶지 않아하는 것은 다음 EventHandler에 더 많은 전력을가한다 제공하고, 당신의 EventHandler에 객체의 어떤 종류의 참조의 어떤 종류를 전달하는 데 필요 해요

예를 들어, 꽃 이벤트 처리기를 추가하면 해당 작업을 수행 할 수 있어야하며, 예를 들어 세계에 불을 붙이거나 구성 요소에서 모든 것을 제거하지 않을 수 있습니다.

이벤트 처리기는 어떤 일이 발생하면 어떻게되는지 알 필요가 없으며 일부 메서드를 호출 할 때만 발생합니다.

public interface Flower { 
    // What ever properties you want you flower to have 
} 

public interface Ground { 

    public void add(Flower flower); 
    // Other stuff you might like ground to have/do 

} 

예를 들어, 인터페이스의 몇 가지를 만들어

시작 ...이 완료 또는 그들로부터 얻을 수있는 기술, 이러한 인터페이스의 다른 사용자에게 계약을 설명합니다. 이는 OO 프로그래밍에서 매우 중요한 개념입니다.

당신은 다음이 클래스

public class AFlower extends ... implements Flower { 

} 

public class SomeGround extends ... implements Ground { 

} 

이 이러한 인터페이스의 물리적 구현 있습니다에 대한 구현의 어떤 종류를 제공해야합니다, 당신은 Flower의 구현, Rose, VenusFlyTrap의 수를 가지고 있지만, Ground원 '수 당신의 EventHandler 실제로 유용한 아무것도 할 수 있으려면 t 관리 ... 이제

, 위해, 당신은 ... 예를 들어, 그것을 작동하도록 Ground의 인스턴스를 전달해야합니다

당신이 EventHandler의 인스턴스를 만들 때
public class Eventhandler implements java.awt.event.ActionListener { 

    private Ground ground; 

    public Eventhandler(Ground ground) { 
     this.ground = ground; 
    } 

    @Override 
    public void actionPerformed(java.awt.event.ActionEvent e) { 
     Flower flower = new AFlower(); 
     ground.add(flow); 
    } 

그런 다음, 당신은 ... 예를 들어, Ground의 그것을 인스턴스를 통과 할 것

example1.Ground g = new SomeGround(); 
// ground object 
javax.swing.JFrame window = new javax.swing.JFrame("windowwithbutton"); 
//window (JFRAME) 
javax.swing.JPanel panel = new javax.swing.JPanel(); 
//content (JPANEL) 
javax.swing.JButton ab = new javax.swing.JButton("add"); 
ab.addActionListener(new EventHandler(g)); 
+0

오, 그것은 나를 많이 도와 줬어! 하지만 이미 지원 코드가 있기 때문에 인터페이스를 추가하지 않고했습니다. 이제 "EventHandler"메서드가있는 "add"버튼을 클릭하면 "Program"클래스의 바닥에 꽃이 정확하게 생성됩니다. 도움을 주셔서 감사합니다. – Jaye