gpt4 book ai didi

java - 如何在 Java Swing 中使一个事件监听器监听多个文本字段?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:41:41 25 4
gpt4 key购买 nike

我有一个带有多个文本小部件的外壳。

每个都对应一个不同的 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 本身似乎没有保存此类信息,也没有任何方式来唯一标识更改的文本字段。

编辑:如果可能的话,只有一个 Listener 来处理所有情况对我来说非常重要。

欢迎回答“使用其他类型的字段和监听对象”,以防 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,但我认为您想要的是 prevent code duplication ,你不关心还有很多这样的对象。如果只有一个对象,然后写它来更新相应的字段,那就难多了;这种方式应该可以实现干净代码的目标,而无需真正复杂的代码。

关于java - 如何在 Java Swing 中使一个事件监听器监听多个文本字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32722506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com