首页 > 解决方案 > 如何将项目添加到选择后刷新的组合框?

问题描述

我正在为我的团队创建一个 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。

标签: javaswing

解决方案


推荐阅读