如何在选择后刷新的组合框中添加项目?

时间:2019-06-12 12:59:45

标签: java swing

我正在为我的团队创建一个Java Swing(WindowBuilder)应用程序,但是由于缺乏知识,我一直不知所措。我想要实现的是在用户单击先前的选择之后,自动填充ComboBox中的项目,依此类推。该代码当前的工作方式是,当用户为特定的HTTP GET请求填写信息时,会向他们显示一个ComboBox,该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。

0 个答案:

没有答案