簡體   English   中英

如何在另一個類中使用ActionListener

[英]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機制

我在這里發布了相同背景的答案

JFrame在單獨的類中,ActionListener怎么樣?


- 編輯 -

ActionEvent獲取源代碼然后找到它的父級(如果需要,獲取父級的父級,直到獲得需要重新調整大小的所需組件)並在其上調用setSize()

  1. 在控制器中創建View的實例

  2. setSize(xx,yy)方法的訪問修飾符從private更改為public

  3. actionPerformed() setSize替換為view.setSize(xx,yy)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM