![](/img/trans.png)
[英]How do I resize labels, text fields, etc. in the IntelliJ Java Swing form?
[英]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或諸如此類的一些瘋狂邏輯。
現在你有一堆String
和Text
對象。 將它們全部卷入一個類:
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.