1
我有兩個類:主類和叫做「Window」的類。 Window類中有一些按鈕,是否可以讓「主」類知道發生了什麼?總之,類「Window」中的按鈕應該觸發主類中的某些東西。Java actionlistener action在不同的類中執行
或者我應該只是在「窗口」類中輸入所有內容?
我有兩個類:主類和叫做「Window」的類。 Window類中有一些按鈕,是否可以讓「主」類知道發生了什麼?總之,類「Window」中的按鈕應該觸發主類中的某些東西。Java actionlistener action在不同的類中執行
或者我應該只是在「窗口」類中輸入所有內容?
是的,這是可能的。 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
}
}
感謝您的支持。雖然我的主要方法是在Main類中,所以我將「this」傳遞給「window」構造函數:) – Bebras
是否要通知全班同學?像'static'字段一樣? (不要這樣做)相反,讓你的'Window'對象創建一個'Main'對象並對其進行操作。 –
但是,它不會像在Window類中做所有事情一樣嗎? – Bebras
是的,所有代碼都可以寫在同一個文件中,但這不是很好的設計。 [檢查高凝聚GRASP模式。](http://en.wikipedia.org/wiki/GRASP_(object-oriented_design)#High_Cohesion) –