2011-09-14 4 views
0

의 외부 활동은 주요() 또는 내가 쓰는 주요

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
// TODO add your handling code here: 
    jTextField1.setText("do something"); 
} 

의 외부과 같은 코드를 수행하고이를

 jButton1.addActionListener(new java.awt.event.ActionListener(){ 


      public void actionPerformed(ActionEvent e) { 
       jTextField1.setText("aaaaaaaaaa"); 
      } 
     }); 
처럼 실행()에 기록 될 수있다

이 두 코드의 차이점은 어떤 프로그래밍 오버 헤드 관련 문제인지 아니면 더 나은 코딩 스타일인지에 관한 것입니다.

내가 run()에 쓸 때 netbeans를 사용하고있다. jTextField1을 정적으로 만들 것을 요구할 것이다. main mathod는 정적이다. 그래서 나는 프로그램이 멈출 때까지 메모리를 차지할 것이기 때문에 firstone이 좋지 않을 것이라고 생각한다. ?

2. 내가하고 싶은 모든 버튼 동작이 다른 클래스로 작성되면 어떻게 스윙 양식으로 구현할 수 있습니까?

+0

'run()'클래스의 클래스? 'Runnable','Thread' 또는 다른 것? – Mohayemin

답변

0

메인을 가능한 작게 유지하고, 생성자를 호출하고 setVisible (true)로 줄이십시오.

public void run() { 
     new NewJFrame().setVisible(true); 
    } 

그 이유는 다른 응용 프로그램에서 클래스를 재사용해야 할 수도 있기 때문입니다. Netbeans 레이아웃을 유지하면서 항상 클래스의 모든 위젯을 만드는 것이 좋습니다.

두 번째 옵션을 사용하고 this을 사용해야하는 경우 클래스가 확장하는 스윙 위젯이 아니라 ActionListener를 참조합니다.

public class AListener implements ActionListener { 

    public void actionPerformed(ActionEvent e) { 
     if (e.getActionCommand().equals("B1")) 
      JOptionPane.showMessageDialog(null, "B1 clicked!"); 
     else if (e.getActionCommand().equals("B2")) 
      JOptionPane.showMessageDialog(null, "B2 clicked!"); 
    } 

} 

을하고 같은) (NB의 initComponents 후 생성자에서 버튼에 ActionListener를 추가합니다 :

다른 클래스에 ActionListener를 넣어하기 위해서

클래스 같이 할

public NewJFrame() { 
    initComponents(); 
    ActionListener al = new AListener(); 
    jButton1.addActionListener(al); 
    jButton2.addActionListener(al); 
} 

이 기능을 사용하려면 모든 버튼에 대해 적절한 setActionCommand 문자열을 추가해야합니다.

jButton1.setActionCommand("B1"); 
    jButton2.setActionCommand("B2"); 

Netbeans에서는 모든 버튼의 작성 후 코드를 예정된 문자열을 포함하도록 변경하면 쉽게 수행 할 수 있습니다.

"정상적인"경우 (60 개의 버튼이없는 곳)에는 여전히 표준을 고수하는 것이 좋습니다. 그것은 당신이 당신의 어플리케이션을 어떻게 디자인하는지에 대한 맛의 문제입니다.

대부분의 경우 응용 프로그램의 동작은 클래스에 로컬 인 데이터 세부 정보를 공유해야합니다. 해당 정보를 명시 적으로 Alistener로 전달하지 않으려면 this을 사용하려면 사용중인 클래스 안에 ActionListener를 함께 보관하십시오.

+0

하지만 너무 많은 버튼이 있고 모든 버튼마다 다른 액션이 있다면 클래스와 같은 많은 aListner를 만들고 모든 클래스에는 actionPerformed() 메소드가 있습니다. 여기서 action.what은 호출 사이의 차이점을 정의합니다. 그것을 생성자 NewJFrame 또는 run() 정의하십시오. 당신이 예제를 제공하는 경우 그것은 나를 위해 더 좋은 것입니다 왜냐하면 나는 스윙에 새로운. –

+0

많은 버튼이있는 경우에도 하나의 ActionListener를 사용할 수 있지만 public void setActionCommand (String command) 및 public String getActionCommand (String command)를 사용하면 도움이됩니다.내 Netbeans 설치가 완료된 후 샘플을 내 답변에 추가합니다. :-) –

+0

하나의 ActionListener 클래스로 2 개의 버튼을 지원하도록 위의 예제를 변경했습니다. 나는 당신이 main-run 안에서 사물을 정의하는 것을 더 잊어 버려야한다고 생각한다. 코드 재사용만으로 충분합니다. 또한 모든 것을 정적으로 정의해야한다고 생각하십시오. –

관련 문제