2016-04-13 67 views
0

私はJava Swingに深刻な問題を抱えています。パネルをJava Swingに添付されたパネルから削除するには?

これは私が私のチャートを初期化する方法で、すべてが今罰金だ分野でJPanelは、私が作成したxyChartでそれを初期化するよう、xyChartPanelが宣言されます。このステップが完了すると、私はJPanelに中心を置く(xyChartPanelに描かれた)チャートを見ることが大丈夫です。コードを書いています。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); 
    } 

今、問題が来る、私は実際に私がラジオボタン上の自分の行動に反応し、私のチャートのスタイルを変更したい、私のチャートはすべての時間そのままにしたくはありません。

私はこの方法で

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

参照を取るupdateChartPanelStyle(JRadioButton styleButton)方法を書いて、私は最後の関数で初期化xyChartのスタイルを変え、そしてxyChartPanelを再初期化し、作業に更新xyChartPanelを追加しますパネル。興味深いことに、私は自分のGUIに変更が見られませんでした。私はこれが私のxyChartのスタイルに後で変更できない問題であると思った。しかし、これは事実ではありません。

this.remove(xyChartPanel);xyChartPanelを「削除」しても、GUIは変更されていないようです。

これは本当に奇妙です。どうすればいいですか?

+0

コード内で 'updateChartPanelStyle'をどのように呼び出すのですか? –

+0

変更するたびに新しいXChartPanelを作成する必要があるかどうかわかりません。レンダリングスタイルを設定してrepaintを呼び出すだけです。 – MadProgrammer

答えて

1

動的にスイングするコンポーネントを追加/削除するたびに、JPanel(またはJFrameを直接追加する場合はrepaint();)にrevalidate();、次にrepaint();を呼び出す必要があります。

+0

(1+)revalidate()とrepaint()を呼び出す必要があります。あなたが変更したパネル – camickr

+0

@camickrそれを指摘してくれてありがとう!それが私が言いたいことでした。今修正されました。 –

関連する問題