我的Java摇摆遇到了严重的问题。

这就是初始化图表的方式,现在一切似乎都很好,在字段中将xyChartPanel声明为JPanel,然后使用刚刚创建的xyChart对其进行初始化。完成此步骤后,我可以看到图表(绘制到xyChartPanel)居中于正在编写代码的JPanel上,请参见add(xyChartPanel, BorderLayout.CENTER);

private void initXYChart() {
        // Create Chart
        xyChart = new XYChartBuilder().width(800).height(800).xAxisTitle(xColName).yAxisTitle("Y").build();

        // Customize Chart
        xyChart.getStyler().setLegendPosition(LegendPosition.InsideNE);
        xyChart.getStyler().setAxisTitlesVisible(true);
        xyChart.getStyler().setDefaultSeriesRenderStyle(XYSeriesRenderStyle.Line);

        double[] yCoordArray = new double[xCoordArray.length];

        // Loop through the series
        for (int i = 0; i < yCoordinates.size(); i++) {
            List<Double> yCoordOneSeries = yCoordinates.get(i);
            // Convert list to array
            for (int j = 0; j < yCoordArray.length; j++) {
                yCoordArray[j] = yCoordOneSeries.get(j);
            }
            xyChart.addSeries(yColNames.get(i), xCoordArray, yCoordArray);
        }

        xyChartPanel = new XChartPanel<>(xyChart);
        add(xyChartPanel, BorderLayout.CENTER);

        xyChart.getStyler().setDefaultSeriesRenderStyle(XYSeriesRenderStyle.Area);

        add(xyChartPanel, BorderLayout.CENTER);
    }


现在问题来了,我不想我的图表一直保持不变,实际上我想根据我对单选按钮的操作更改图表的样式。

我刚刚写了updateChartPanelStyle(JRadioButton styleButton)方法

private void updateChartPanelStyle(JRadioButton styleButton) {
        String style = styleButton.getText();
        if (styleButton.isSelected()) {
            System.out.println(style);
            switch (style) {
            case "Line":
                xyChart.getStyler().setDefaultSeriesRenderStyle(XYSeriesRenderStyle.Line);
                break;
            case "Area":
                xyChart.getStyler().setDefaultSeriesRenderStyle(XYSeriesRenderStyle.Area);
                break;
            case "Scatter":
                xyChart.getStyler().setDefaultSeriesRenderStyle(XYSeriesRenderStyle.Scatter);
            }

            xyChartPanel = new XChartPanel<>(xyChart);
            add(xyChartPanel, BorderLayout.CENTER);
        }
    }


在此方法中,我更改了在上一个函数中初始化的xyChart的样式,并重新初始化了xyChartPanel,然后将更新后的xyChartPanel添加到工作面板中。有趣的是,我的GUI没有任何变化。我认为这可能是我的xyChart问题,其样式之后无法更改。但是事实并非如此。

即使我用xyChartPanel“删除”了this.remove(xyChartPanel);,GUI似乎也没有改变。

这真的很奇怪,我现在该怎么办?

最佳答案

每次添加/删除要动态摆动的组件时,都需要先调用revalidate();,然后在JPanel(或直接添加到JFrame的JFrame)上调用repaint();

10-06 06:56