java - 如何将项目添加到选择后刷新的组合框?
问题描述
我正在为我的团队创建一个 Java Swing (WindowBuilder) 应用程序,但由于我缺乏知识,我一直碰壁。我想要实现的是在用户单击先前的选择后自动填充 ComboBox 内的项目,依此类推。代码当前的工作方式是,当用户填写特定 HTTP GET 请求的信息时,他们会看到一个预先填充了来自该请求的格式化信息的 ComboBox,他们可以在其中从列表中选择一个项目,然后一次他们这样做会使用上一个请求中的详细信息启动另一个 HTTP GET 请求,依此类推。
我不认为我的方法是正确的,因为每当我检索 JSON HTTP“GET”响应时,我都会遇到“MalformedURL”异常。我已经调试了代码,发现它跳过了我为那个特定的 ComboBox 拥有的所有 ActionListener。目前,我在整个代码中多次使用提到的代码来模拟comboBox.GetSelectedItem()
每次用户从下拉列表中选择值时的事件。我相信代码一直跳过 ActionListener 可能是由于它在另一个之上多次实现的方式,因此总是监听一个特定的事件?
comboBox.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for (int i = 0; i < list.size(); i++) {
String name = list.get(i);
if (comboBox.getSelectedItem().toString().contains(name.substring(0, name.lastIndexOf(",")))) {
selectedViewURL = name.substring(name.lastIndexOf(",") + 1);
break;
}
}
try {
String getNodeViewJson = Get(selectedViewURL + "/api/json?pretty=true");
list.clear();
comboBox.removeAll();
JSONObject nodeViewJsonObject = new JSONObject(getNodeViewJson);
JSONArray jobsArrayNodeView = nodeViewJsonObject.getJSONArray("jobs");
if (jobsArrayNodeView != null) {
for (int i = 0; i < jobsArrayNodeView.length(); i++) {
JSONObject jsonObject = jobsArrayNodeView.getJSONObject(i);
String jenkinsClass = jsonObject.getString("_class");
String jenkinsName = jsonObject.getString("name");
String jenkinsURL = jsonObject.getString("url");
if (jenkinsClass.contains("com.cloudbees.hudson.plugins.folder.Folder")) {
comboBox.addItem(jenkinsName);
list.add(jenkinsName + "," + jenkinsURL);
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
我期望 ComboBox 在选择 ComboBox 列表中的预先存在的值时填充值,并最终遵循相同的结构直到结束。对此的任何帮助将不胜感激,谢谢。
这是使用来自 HTTP GET 请求的初始值填充 ComboBox 后立即显示的重复错误:
java.net.MalformedURLException: no protocol: /api/json?pretty=true
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at impl.Logic.Get(Logic.java:141)
at net.java.maven_jenkins_tool.JenkinsRemoteRegressionTool.JenkinsTool$8.actionPerformed(JenkinsTool.java:851)
at javax.swing.JComboBox.fireActionEvent(Unknown Source)
at javax.swing.JComboBox.contentsChanged(Unknown Source)
at javax.swing.AbstractListModel.fireContentsChanged(Unknown Source)
at javax.swing.DefaultComboBoxModel.setSelectedItem(Unknown Source)
at javax.swing.DefaultComboBoxModel.addElement(Unknown Source)
at javax.swing.JComboBox.addItem(Unknown Source)
at net.java.maven_jenkins_tool.JenkinsRemoteRegressionTool.JenkinsTool$6.itemStateChanged(JenkinsTool.java:789)
这是第 789 行:comboBox.addItem(jenkinsName);
这是第 851 行:String getNodeViewJson = Get(selectedViewURL + "/api/json?pretty=true");
后一行当然不会被触发,因为由于我遇到的 ComboBox 选择问题,“SelectedViewURL”字符串被视为 NULL。