2015-02-01 2 views
-1

제 질문은 Java 프로그래밍, GUI 개념과 관련되어 있습니다. ActionListener에 JButtons, JRadioButtons, JComboBox, JCheckBox와 같은 여러 구성 요소를 등록했는지 알고 싶습니다. 즉,이 구성 요소가 동작을 수행 할 것으로 기대합니다.Java GUI - actionListener 및 actionPerformed

이제 actionPerformed 메서드에서 이러한 모든 구성 요소를 연결하여 작업을 수행하는 방법은 무엇입니까? 예를 들어, JRadioButton, JCheckBox 및 JButton을 검사하고 합계처럼 aJLabel에 무언가를 표시하려고합니다.

actionPeformed 메서드에서 이러한 모든 구성 요소를 어떻게 구현합니까? 감사 하라구요

.. 안부,

+0

이 질문을 읽는 누군가에게 경고 : 응답을 방해하지 마세요,이 사람은 좋은 대답을 upvote하지 않지만 그의 기초적인 수학 코드가 작동하지 않는 방법에 대한 끝없는 논평 토론을 계속합니다. – gknicker

+0

불행히도 귀하의 답변을 투표 할 수 없습니다. Lool man, 여기 upvotes 또는 다른 사람들을 돕기 위해 찾고 있습니까? 다른 사람들을 돕는 것이 투표를 구걸하는 것보다 훨씬 중요하다고 생각합니다! 어쨌든 도와 주셔서 감사합니다! 신의 축복이 있습니다! – user3545953

+0

교환이라고합니다. 사람들은 당신을 도우며, 당신은 무언가를 대가로줍니다. 그러나 당신은 사람들이 당신을 도울 것으로 기대하고, 당신은 아무것도 돌려주지 않습니다. – gknicker

답변

0

기본 방법은 해당 구성 요소에 필요한 작업을 수행 할 것이다, 구성 요소 당 Action 또는 ActionListener을 생성하는 것입니다.

이 고립과 책임의 분리를 제공하고, 당신이 할 경우 바로 재사용의 가능성

그것 (A ActionJToolbar와 바인딩 키와 JMenuItem, JButton에 적용 할 수있다) 또한 내가 actionPeformed 방법의 모든 구성 요소를 구현하려면 어떻게

+0

e.getSource()의 목적은 무엇입니까? – user3545953

+0

'getSource'의 목적은 바로 그것의 이벤트 소스입니다.예를 들어,'JTable' (키 바인딩을 통해)에서 행을 삭제할 수있는'Action'을 정의한다면, 테이블에 대한 직접적인 참조는 원하지 않지만'getSource'를 사용하여 이벤트를 생성 한 테이블을 참조하십시오. – MadProgrammer

+0

내부 클래스와 익명 클래스 이전의 좋은 예전에는 관련없는 액션 핸들링을 가능한 한 적은 수의 ActionListener로 묶는 것이 일반적이었습니다 (부모 클래스를 통해 직접'ActionListener'를 구현해야한다는 사실 또는 하위 클래스 만들기). 이는 엉망이었고 유지 보수, 관리 및 디버그하기가 매우 어렵습니다. 이제는 각 컴포넌트에 대해 하나의 ActionListener를 제공하는 것이 더 나은 습관입니다 (여기서 의미가 있습니다) – MadProgrammer

0

(는 "메가"ActionListener을 쓰기를 다시 나란히 놓이는 같은 단일 Action 또는 ActionListener 교체) 기능을 대체 할 쉽게?

구성 요소를 참조하려면 인스턴스 변수를 만드십시오.

actionPerformed 메서드를 구현하려면 ActionListener을 구현하는 클래스를 만듭니다. 이것은 익명의 클래스 또는 명명 된 클래스가 될 수 있습니다.

이 예제에서는 익명 내부 클래스로 두 개의 ActionListeners를 만듭니다.

이 마지막 예에서 나타낸 바와 같이
public class Scratch extends JFrame 
    implements java.awt.event.ActionListener // <- implements ActionListener 
{ 
    JButton button1 = new JButton("Click Me"); 

    public Scratch() { 
     // layout, etc. 
     add(button1); 
     button1.addActionListener(this); // <- tell button1 to call my actionPerformed() 
    } 

    @Override 
    public void actionPerformed(java.awt.event.ActionEvent event) { 
     Object component = event.getSource(); // which control was clicked? 
     if (component == button1) { 
      // do something in response to button1 click event 
     } 
    } 
} 

우리에 ActionEvent.getSource() 방법을 사용할 수있다 :이 일부 예에서 Scratch.java

import javax.swing.*; 

public class Scratch extends JFrame { 
    JButton button1 = new JButton("Click Me"); 
    JCheckBox check1 = new JCheckBox("Check Me"); 
    JRadioButton radio1 = new JRadioButton("Select Me"); 
    JComboBox<String> combo1 = new JComboBox<String>(new String[] {"Choose Me", "No me!"}); 

    public Scratch() { 
     setPreferredSize(new java.awt.Dimension(50, 170)); 
     setLayout(new java.awt.FlowLayout()); 
     add(radio1); 
     add(check1); 
     add(combo1); 
     add(button1); 
     radio1.addActionListener(new java.awt.event.ActionListener() { 
      @Override 
      public void actionPerformed(java.awt.event.ActionEvent event) { 
       check1.setSelected(!radio1.isSelected()); 
      } 
     }); 
     button1.addActionListener(new java.awt.event.ActionListener() { 
      @Override 
      public void actionPerformed(java.awt.event.ActionEvent e) { 
       combo1.setSelectedIndex(combo1.getSelectedIndex() == 0 ? 1 : 0); 
      } 
     }); 
     pack(); 
    } 

    public static void main(String[] args) { 
     new Scratch().setVisible(true); 
    } 
} 

Scratch 클래스 자체는 ActionListener 인 어떤 구성 요소가 이벤트를 트리거했는지 발견하십시오.

+0

버튼 클릭 이벤트와 라디오 버튼 및 체크 박스 이벤트가 있다면 어떻게 될까요? 이들 모두가 actionPerformed 메소드에 들어갈 수 있습니까? – user3545953

+0

네가 성취하고자하는 일에 더 효과적이라면 말이야. 일반적으로 각 구성 요소에 대해 서로 다른 이벤트 처리기 메서드가 있습니다. 하나의 이벤트 핸들러 만 사용하려는 경우 [getSource()]] (http://docs.oracle.com/javase/7/docs/api/java/util/)를 호출하여 이벤트를 트리거 한 구성 요소를 찾을 수 있습니다. EventObject.html # getSource())를 호출합니다. – gknicker

+0

내가 지금까지 무엇을했는지에 참조 : http://pastebin.com/wwtVVwtW 불행하게도, 그 제대로 작동하지로해야 – user3545953