首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Eclipse SWT中循环组合的Java侦听器

Eclipse SWT中循环组合的Java侦听器
EN

Stack Overflow用户
提问于 2017-08-14 05:13:20
回答 1查看 140关注 0票数 0

我有一个使用Eclipse构建的Java SWT GUI。我正在使用while循环来引用一个文本文件。while循环遍历文本文件的每一行,并为每行上的特定项构建一系列组合框或文本框。每一行代表GUI中的一个可视列,并且根据我在文本文件中有多少项,GUI构建在右侧。为了简单起见,我只包含了我试图弄清楚的代码。

例如,假设我有三行代码,这三行代码在GUI中创建了六个组合框(三列乘两行)。我想在第二列中的顶行上进行更改,以便在底行上执行侦听器,也是在第二列中。然而,现在监听器循环了所有的组合,并对所有三个组合进行了更改,而不仅仅是我想要的一个。我想不出该怎么做。请参阅下面的代码。我很感谢你的帮助。

代码语言:javascript
复制
private void buildMultipleSatPulldowns() {
    try {
        FileReader fr = new FileReader("MultipleSatellites.txt");
        BufferedReader br = new BufferedReader(fr);

        String line = null;
        String[] tempS;
        String constellation = null;
        String satellite = null;

        while ((line = br.readLine()) != null) {
            tempS = line.split("~");
            constellation = tempS[4];
            satellite = tempS[6];

            constNameCombo = new Combo(satellitesComposite2, SWT.NONE);
            constNameCombo.setToolTipText("Pulldown constellation name");
            constNameCombo.setBounds(startX + x2, 71, 125, 28);
            constNameCombo.setItems(constNameArray);
            constNameCombo.setText(constellation);
            constNameCombos.add(constNameCombo);

            constNameCombo.addModifyListener(new ModifyListener() { // captures changed combo values
                public void modifyText(ModifyEvent arg0) {
                    setConstellationPD();
                }
            });

            sPullDown(constellation); // builds the satellite array for the constellation and populates each pulldown

            satNameCombo = new Combo(satellitesComposite2, SWT.NONE);
            satNameCombo.setToolTipText("Pulldown satellite name");
            satNameCombo.setBounds(startX + x2, 106, 125, 28);
            satNameCombo.setItems(satNameArray);
            satNameCombo.setText(satellite);
            satNameCombos.add(satNameCombo);

            startX = startX + nextX;

        }

        br.close();

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

private void setConstellationPD() {

    int constellations = 0;

    for (Combo constNameCombo : constNameCombos) {

        // What do I do here so that only the desired satNameCombo changes to reflect the desired pull down?

        setSatellitesPD(constellations, constNameCombo)

        constellations++;
    }

}

private void setSatellitesPD(int c, String cN) {
    int satellites = 0;

    for (Combo satNameCombo : satNameCombos) {
        if (c == satellites) {
            satNameCombo.setText(satNameCombos.get(satellites).toString());
            satNameCombo.removeAll();
            sPullDown(cN);
            satNameCombo.setText("select Satellite");
        }
        satellites++;
    }

}

private void sPullDown(String cName) {
    // sPullDown takes the constellation name and returns a String Array of all objects in the constellation. This code works correctly when called.
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-14 07:42:09

如果我理解正确的话,您需要一种方法来知道是哪个组合触发了事件,以便影响其他一些组件。

ModifyEvent这样的SWT事件具有getSource()方法,该方法将返回发生事件的对象。

有了它,您只需要正确地识别它;例如,您可以简单地使用constNameCombos.indexOf(eventCombo)来检索它的索引。

或者,更有效的方法是,您可以使用setData方法将一些数据附加到您的组合对象中,并使用getData在事件中检索它,例如在循环中:

代码语言:javascript
复制
// "i" would be the index of the combo
constNameCombo.setData("index", i);
i++;

如果是这样的话:

代码语言:javascript
复制
Combo eventCombo = (Combo) arg0.getSource();
int index = eventCombo.getData("index");

有了这些信息,您应该能够识别出您想要更改的其他组件。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45664960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档