Java Eclipse SWT 中循环组合的侦听器
Java Listener for looped combo in Eclipse SWT
我有一个使用 Eclipse 构建的 Java SWT GUI。我正在使用 while 循环来引用文本文件。 while 循环遍历文本文件的每一行,并为每一行的特定项目构建一系列组合框或文本框。每行代表 GUI 中的一个可视列,并且根据我在文本文件中有多少项目,GUI 构建到右侧。为简单起见,我只包括我试图找出的代码。
例如,假设我用三行代码在 GUI 中创建了六个组合框(三列乘两行)。我想在第二列的第一行进行更改,以在第二列的底行执行监听器。但是,现在 Listener 循环遍历所有组合并对所有三个进行更改,而不仅仅是我想要的那个。我不知道如何进行这项工作。请参阅下面的代码。感谢您的帮助。
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()
,它将 return 事件发生的对象。
有了它,你只需要正确识别它;例如,您可以简单地使用 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 构建的 Java SWT GUI。我正在使用 while 循环来引用文本文件。 while 循环遍历文本文件的每一行,并为每一行的特定项目构建一系列组合框或文本框。每行代表 GUI 中的一个可视列,并且根据我在文本文件中有多少项目,GUI 构建到右侧。为简单起见,我只包括我试图找出的代码。
例如,假设我用三行代码在 GUI 中创建了六个组合框(三列乘两行)。我想在第二列的第一行进行更改,以在第二列的底行执行监听器。但是,现在 Listener 循环遍历所有组合并对所有三个进行更改,而不仅仅是我想要的那个。我不知道如何进行这项工作。请参阅下面的代码。感谢您的帮助。
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()
,它将 return 事件发生的对象。
有了它,你只需要正确识别它;例如,您可以简单地使用 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");
根据这些信息,您应该能够确定要更改的其他组件。