簡體   English   中英

如何在Java Swing中為多個文本字段創建一個事件監聽器?

[英]How do I make one event listener to multiple text fields in Java Swing?

我有一個帶有幾個Text Widgets的shell。

每個對應一個不同的String對象,該對象保存其輸入以供以后處理(在放置小部件本身之后)。

每次文本更改時,我都使用ModifyListener來更新字符串,如下面的簡單示例所示:

    String clientNametext = "";
    Text clientName = new Text(composite, SWT.BORDER);
    clientName.addModifyListener(new ModifyListener() {

        @Override
        public void modifyText(ModifyEvent paramModifyEvent)
        {
            clientNametext = clientName.getText();

        }
    });

但是,我有許多這樣的Text字段,我想清理代碼,而不是每個字段附加一個新的內部類監聽器 - 創建一個ModifyListener ,然后將其附加到所有這些,並修改正確的根據哪個字段更改觸發事件的變量。

問題是, ModifyEvent本身似乎不包含此類信息,或以任何方式唯一標識哪個文本字段已更改。

編輯:對我來說,如果可能的話,只有一個處理所有案例的監聽器是非常重要的。

歡迎使用“使用其他類型的字段和偵聽對象”的答案,以防ModifyEvent無法唯一地識別出現它的確切小部件,而不使用映射對象ID或諸如此類的一些瘋狂邏輯。

將整個行為包裝在一個類中。

現在你有一堆StringText對象。 將它們全部卷入一個類:

public class ListeningText {
  private String clientNametext = "";
  private final Text clientName = new Text(composite, SWT.BORDER);

  public ListeningText() {
    clientName.addModifyListener(new ModifyListener() {
      @Override
      public void modifyText(ModifyEvent paramModifyEvent)
      {
        clientNametext = clientName.getText();
      }
    });
  }

  public Text getText() {
    return Text;
  }

  public String getValue() {
    return value;
  }
}

然后,像這樣使用它。 您只創建一個字段項,一個ListeningText ,而不是兩個,一個String和一個Text 你會像這樣使用它:

public class YourComponent {
  ListeningText text;
  ListeningText anotherText;
  // etc.

  public void initComponents() {
    // add them like this:
    text = new ListeningText();
    container.add(text.getComponent());
  }

  public void doSomething() {
    // get the value like this:
    System.out.println(text.getValue()); // or whatever
  }
}

請注意,此解決方案不會創建“單個” ModifyListener ,但我認為您想要的是防止代碼重復 ,您不必關心仍有許多此類對象。 只有一個對象,然后編寫它來更新相應的字段會困難得多; 這種方式應該完成干凈的代碼目標,而不需要真正復雜的代

暫無
暫無

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

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