![](/img/trans.png)
[英]How to use ActionListener when the button function is in another class
[英]How to use ActionListener in another class
我正在清理我的代碼。 我讀到我把ActionListener
另一個類是更好的。 這就是我做的。
但是在我的ActionListener
,除了在代碼中的某個點,一切都有效,我得到了一個setSize(xx,xx)
。 我以前工作過,因為它在同一個班級。 但不是了。 我嘗試了多種解決方案,但我無法理解。
ActionListener
:
public class ActionFrame implements ActionListener{
public void actionPerformed(ActionEvent e){
Object src = e.getSource();
if(src == Frame.Console_Bouton){
System.out.println("Bouton console");
if(getSize().getWidth() >= 750){
/** If True (Retirer) */
for(int i = 1090; i > 689; i--){
setSize(i, 490);
System.out.println("Rétractation du Frame");
}
}else{
/** If False (Etirer) */
for(int i = 689; i < 1090; i++){
setSize(i, 490);
System.out.println("Etirage du Frame");
}
}
}
...
至於錯誤,沒有,它只會凍結程序。
猜測:可能這是一個提取ActionListener
不是一個好主意的情況,因為它使用對象的private
方法。
具有通用/可重用功能的類應該是獨立的。 只要它們是用於特定用途,實踐(根本不是!)只是將它們盡可能地靠近它們使用的地方。 我可以想象你的setSize
方法不是你的類的公共接口的一部分,所以ActionListener
只是“粘合”將事件耦合到你的特定類。
在這種情況下,您將創建一個“微小”膠水線:
abstract class ActionAdapter implements ActionListener {
}
...
frame.Console_Bouton.addActionListener(
new ActionAdapter(){ // anonymous inner class
void actionPerformed(ActionEvent e){
... // (no need to check source!)
}
});
創建一個新類:
ButtonAction implements actionListner
{
//put the code above here
}
這樣做的好方法是使用Callback機制 。
我在這里發布了相同背景的答案
- 編輯 -
從ActionEvent
獲取源代碼然后找到它的父級(如果需要,獲取父級的父級,直到獲得需要重新調整大小的所需組件)並在其上調用setSize()
。
在控制器中創建View的實例
將setSize(xx,yy)
方法的訪問修飾符從private
更改為public
。
將actionPerformed()
setSize
替換為view.setSize(xx,yy)
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.