2013-10-16 48 views
1

我有兩個類:主類和叫做「Window」的類。 Window類中有一些按鈕,是否可以讓「主」類知道發生了什麼?總之,類「Window」中的按鈕應該觸發主類中的某些東西。Java actionlistener action在不同的類中執行

或者我應該只是在「窗口」類中輸入所有內容?

+0

是否要通知全班同學?像'static'字段一樣? (不要這樣做)相反,讓你的'Window'對象創建一個'Main'對象並對其進行操作。 –

+0

但是,它不會像在Window類中做所有事情一樣嗎? – Bebras

+0

是的,所有代碼都可以寫在同一個文件中,但這不是很好的設計。 [檢查高凝聚GRASP模式。](http://en.wikipedia.org/wiki/GRASP_(object-oriented_design)#High_Cohesion) –

回答

2

是的,這是可能的。 ActionListener是接口,因此您可以讓「main」類在Windows類構造函數中實現此接口並將其作爲參數傳遞給Window類。
下面的代碼,可以幫助你:

主要類:

package test; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class Main implements ActionListener 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     //button clicked, so do you job here 

    } 
} 

Windows類:

package test; 

import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JPanel; 

public class Window extends JPanel 
{ 
    public Window(ActionListener listener) 
    { 
     JButton b = new JButton("Button 1"); 
     b.addActionListener(listener); 
     add(b); 

     //do other stuff 
    } 
    public static void main(String[] args) 
    { 
     Window w = new Window(new Main()); 
     //continue with initialization process 
    } 
} 
+0

感謝您的支持。雖然我的主要方法是在Main類中,所以我將「this」傳遞給「window」構造函數:) – Bebras