У меня возникают проблемы с отображением ChartPanel в существующей jPanel.Это связано с Матиссом? - PullRequest
0 голосов
/ 14 марта 2019

это мой первый вопрос о переполнении стека, я прошу прощения за любые ошибки в описании проблемы, поэтому не стесняйтесь просить больше или другое описание.

Я делаю программу с API jFreeChart, гдеЯ пытаюсь разрешить оперативное редактирование отображаемых диаграмм, создав ChartPanel и обновляя диаграмму внутри него каждый раз, когда производится редактирование.

public void displayChart(JFreeChart chart) {
    ChartPanel chartPanel = new ChartPanel(chart);
    chartPanel.setDomainZoomable(true);
    chartPanel.setVisible(true);
    jPanel3.add(chartPanel, BorderLayout.CENTER);
    jPanel3.setLayout(new java.awt.BorderLayout());
    jPanel3.validate();
}

private void ChartSelectionActionPerformed(java.awt.event.ActionEvent evt) {                                               
    String selection;
    selection = ChartSelection.getActionCommand();
    if (selection == "S/D") {
    Chart Chart = new Chart();
    JFreeChart chart = Chart.generateSandDBase();
    displayChart(chart);
    } else {

    }
}                                              

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    Series Series = new Series();
    Chart Chart = new Chart();
    XYSeries supply = Series.getSupplySeries();
    double tempX;
    double tempY;
    for (int i = 0; i < 10; i++) {
        tempX = (double) supply.getX(i);
        tempX = tempX + 1;
        tempY = (double) supply.getY(i);
        supply.remove(i);
        supply.add(tempX, tempY);
        System.out.println(supply.getX(i).toString());
        System.out.println(supply.getY(i).toString());
    }
    Series.setSupplySeries(supply);
    JFreeChart chart = Chart.generateSandD(supply, Series.getDemandSeries());
    displayChart(chart);
}                   

Я нашел похожие вопросы, но все найденные решения не помогли решить эту проблему.Во время выполнения диаграмма просто не отображается на панели.Я попытался добавить новую панель внутри существующей, а затем добавить ChartPanel внутри нее.Я попытался проверить весь JFrame, а также очистить Jpanel перед добавлением моей ChartPanel, а затем проверить все это после этого.

Я немного беспокоюсь, что это может иметь какое-то отношение к Матиссу, так как яЯ использую конструктор графического интерфейса пользователя NetBeans, который, похоже, работает на магию темного пространства, которая могла бы все это испортить.

Большое спасибо за любую помощь, я начинающий программист, так что все идет очень долго.

Редактировать: Итак, после нескольких часов возни со всем, я услышал что-то о нарушении иерархии, когда я пытаюсь добавить диаграмму во время выполнения.Я не очень много знаю об этом.Есть ли способ для меня, чтобы создать экземпляр моего ChartFrame в конструкторе GUI?Я знаю, где разместить код, но не могу заставить его работать, поскольку для фрейма диаграммы должна быть создана диаграмма.

1 Ответ

0 голосов
/ 14 марта 2019

Итак, после пары ужасных, ужасных часов, прочесывая Интернет, я обнаружил проблему.

Оказывается, что для того, чтобы иметь ChartPanel в JPanel, JPanel должен быть в BorderLayout. Я уже пытался сделать это пару раз прежде, но стандартный построитель Swing GUI в NetBeans, Matisse, кажется, не позволяет изменять макет размещенного компонента во время выполнения.

Мне пришлось установить JPanel на BorderLayout на вкладке дизайна Matisse, щелкнув правой кнопкой мыши на JPanel и установив макет в качестве границы. Матисс по какой-то причине решает изменить размер панели до (0,0), так что также необходимо изменить размер.

Кроме этого мой код был верным.

...