簡體   English   中英

Eclipse SWT中用於循環組合的Java偵聽器

[英]Java Listener for looped combo in Eclipse SWT

我有一個使用Eclipse構建的Java SWT GUI。 我正在使用while循環來引用文本文件。 while循環遍歷文本文件的每一行,並為每一行上的特定項目構建一系列組合框或文本框。 每行代表GUI中的一個可視列,根據我在文本文件中有多少項,GUI會建立在右側。 為簡單起見,我僅包含我嘗試找出的代碼。

例如,假設我有三行在GUI中創建六個組合框(三列乘兩行)。 我想在第二列的第一行進行更改以在第二行的底行執行偵聽器。 但是,現在,偵聽器遍歷所有組合,並更改了所有三個組合,而不僅僅是我想要的組合。 我不知道如何使這項工作。 請參見下面的代碼。 感謝您的幫助。

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.
}

如果我理解正確,則需要一種方法來知道哪個組合觸發了該事件,以影響其他一些組件。

諸如ModifyEvent之類的SWT事件具有方法getSource() ,該方法將返回發生事件的對象。

有了這些,您只需要正確識別即可; 例如,您可以簡單地使用constNameCombos.indexOf(eventCombo)檢索其索引。

或者,更有效地,您可以使用setData方法將一些數據附加到您的組合,然后使用getData在事件內部檢索它們,例如在循環內部:

// "i" would be the index of the combo
constNameCombo.setData("index", i);
i++;

並且在以下情況下:

Combo eventCombo = (Combo) arg0.getSource();
int index = eventCombo.getData("index");

利用這些信息,您應該能夠確定要更改的其他組件。

暫無
暫無

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

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