2014-04-30 3 views
0

ActionListener가 작동하지 않습니다. joptionpane 팝업이 나타나면 아무 것도 나타나지 않습니다. crear_Arbitro 클릭하십시오. JFrame 내에서 다른 JPanels에 대한 외부 ActionListener 클래스를 만드는 데 문제가있는 경우 JTabbedPane을 사용하여 JFrame에 삽입되는 일부 Jpanels를 만들고 MVC 아키텍처 패턴을 사용하여 GUI를 만드는 방법을 배우는 것이 좋습니다 내가 뭘하려는거야에 대한 코드의 예 :MVC를 사용하여 외부 ActionListener를 생성합니다

컨트롤러 :

public class Controlador_Universal { 

    public VentanaPrincipal_vista ventanaPrincipalVista; 
    public Arbitros_modelo arbitrosModelo; 
    public ArbitrosListener ArbitrosListener; 

    public Controlador_Universal() { 
     ventanaPrincipalVista = new VentanaPrincipal_vista(); 
     ArbitrosListener ArbitrosListener = new ArbitrosListener(); 
     ventanaPrincipalVista.pestañaArbitros.crear_Arbitro.addActionListener(ArbitrosListener); 
    } 

리스너 :

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JOptionPane; 
import modelo.Arbitros_modelo; 
import controlador.Controlador_Universal; 

public class ArbitrosListener extends Controlador_Universal implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     if(e.getSource() == super.ventanaPrincipalVista.pestañaArbitros.crear_Arbitro) { 
      JOptionPane.showMessageDialog(null, "Presionó en crear Arbitro"); 
     } 
    } 
} 
+0

당신은 문제가 있다고 말하면서 문제가 무엇인지 설명하지 않았습니다. – csmckelvey

+0

@Takendarkk, 네 말이 맞아. 나는 편집했다. 문제는 ActionListener 인'ArbitrosListener'가 인식되지 않는다는 것입니다. – user3363537

답변

1

가 명명 주장을 따르십시오. 클래스 또는 변수 이름에 _ 밑줄을 사용하지 마십시오.

ArbitrosListener ArbitrosListener = new ArbitrosListener(); 

당신이를 만들 함께 : 변수 이름은 하지 문제에 관한 특수 문자 (이 정말 blöd 수 있습니다 ...)

포함해야합니다, 바람직하게는 소문자로 시작해야하고 ArbitrosListener 리스너 클래스의 새 인스턴스 이 클래스가 Controlador_Universal 클래스를 확장하더라도이 클래스를 만들려는 클래스는 입니다. 그래서 쿼리

if(e.getSource() == super.ventanaPrincipalVista.pestañaArbitros.crear_Arbitro) 

true 할 수 없다 다음 getSource 방법은 액션 청취자가 추가 된 인스턴스의 crear_Arbitro 반환하지만이 액션 청취자 자체보다 다른 하나입니다.

현재 코드를 기반으로이 검사가 필요하지 않습니다. 특히, 이 아닌은 청취자가 Controlador_Universal 클래스를 확장하도록 할 수 있습니다. 현재 코드를 기반으로하면

public class ArbitrosListener implements ActionListener { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     JOptionPane.showMessageDialog(null, "Presionó en crear Arbitro"); 
    } 
} 

으로 작성하면됩니다. 여러 개의 버튼이있는 경우, 당신은 ArbitrosListener 클래스를 생략 할 수 있으며, 대신 그러나이

ventanaPrincipalVista.pestañaArbitros.crear_Arbitro.addActionListener(
    new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     JOptionPane.showMessageDialog(null, "Presionó en crear Arbitro"); 
    } 
}); 

처럼 익명의 청취자를 사용,이 모든 MVC 다소 관련이없는 것 같다, 그래서 이것은 관련이 어떻게 가능성이 더 명확하게 지적해야 모델, 뷰 및 컨트롤러에 연결합니다.

+0

덕분에 MCV와 관련이 있습니다 : -1 모든 패널이 별도의 클래스로 생성됩니다 -2 모든 것을 포함 할 메인 창이 있습니다. 패널 -3 GUI의 백엔드 측에 JDBC를 사용하여 DB에 연결합니다. -4 위의 컨트롤러는 모든 'MainWindow.Panel.object.addActionListener'와 관련이 있습니다. 큰 클래스 컨트롤러가 ActionListener Classes를 사용하고 컨트롤러 내에서 코드가 그렇게 커지지 않도록 각 Panel에 대한 ActionListener 클래스를 개별적으로 만들려고합니다. – user3363537

관련 문제