Как добавить в выпадающий список элементы, которые обновляются после выбора? - PullRequest
0 голосов
/ 12 июня 2019

Я создаю приложение Java Swing (WindowBuilder) для своей команды, но из-за недостатка знаний я постоянно бью себя в стену. Я пытаюсь добиться автоматического заполнения элементов внутри ComboBox после того, как пользователь нажал на предыдущий выбор, и так далее. В настоящее время код работает так, что, когда пользователь заполняет информацию для конкретного HTTP-запроса GET, его приветствует ComboBox, предварительно заполненный отформатированной информацией из этого запроса, в котором он может выбрать один из элементов в списке и один раз они запускают другой HTTP-запрос GET, используя данные из предыдущего запроса и т. д.

Я не думаю, что мой подход верен, так как я постоянно спотыкаюсь об исключении "MalformedURL" всякий раз, когда получаю ответ JSON HTTP "GET". Я отладил код и обнаружил, что он пропускает все ActionListeners, которые у меня есть для этого конкретного ComboBox. В настоящее время я использую упомянутый код несколько раз по всему коду для имитации события 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 и, в конечном счете, будет следовать той же структуре до конца. Любая помощь для этого будет высоко оценена, спасибо.

Это повторяющаяся ошибка, которая появляется сразу после заполнения ComboBox начальными значениями из запроса HTTP GET:

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");

Последняя строка, конечно, не запускается, потому что эта строка "SelectedViewURL" видится как NULL из-за проблемы выбора ComboBox, с которой я столкнулся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...