gpt4 book ai didi

Eclipse SWT 中循环组合的 Java 监听器

转载 作者:行者123 更新时间:2023-12-02 02:39:55 24 4
gpt4 key购买 nike

我有一个使用 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");

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

关于Eclipse SWT 中循环组合的 Java 监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45664960/

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