Выбор ComboBox

У меня есть график, показывающий линии в 3 цветах (красный, зеленый, синий), как на скриншоте.

Когда я нажимаю один из цветов, то есть красный, я хочу показать график только красным цветом. А если нажимаю зеленый то только зеленый. Но если я ничего не нажимаю, то он должен показать все.

Ниже мой код для создания и рисования линий.

import java.awt.Color;
import java.io.FileInputStream;

import javax.swing.JOptionPane;
import javax.swing.JScrollBar;
import javax.swing.SwingConstants;

import java.io.*; 

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;

class LineGraph extends ApplicationFrame {



       private JFreeChart createChart(final XYDataset dataset) {

            // Graph wird erstellt...

       final JFreeChart chart = ChartFactory.createXYLineChart("","X","Y",dataset,PlotOrientation.VERTICAL,true,false,false);


            final XYPlot plot = chart.getXYPlot();

            plot.setBackgroundPaint(Color.lightGray);
            plot.setDomainGridlinePaint(Color.white);
            plot.setRangeGridlinePaint(Color.white);

            NumberAxis xAxis = (NumberAxis) plot.getRangeAxis();
            xAxis.setRange (0, 7500);

            NumberAxis yAxis = (NumberAxis) plot.getRangeAxis();
            yAxis.setRange(0, 270);


            return chart;


          }   





    public LineGraph(final String title) {

        super(title);
    }

   public ChartPanel createPanel(final String title){

       final XYDataset dataset = createDataset();
       final JFreeChart chart = createChart(dataset);
       ChartPanel chartPanel = new ChartPanel(chart);
       chartPanel.setPreferredSize(new java.awt.Dimension(950, 570));
       //chartPanel.setSize(50, 50);
       //setContentPane(chartPanel);

       return chartPanel;
   }

   private XYSeriesCollection createDataset() {

       try {

       final int pictureWidth = 7500;
       final int pictureHeight = 5;
       int pictureArray[] = new int[pictureWidth * pictureHeight];
       int pixArray[] = new int[pictureWidth];
       int R, G, B, U;
       int averageX, averageY;

      FileInputStream inp = new FileInputStream("d:\\DO_18-02-2014_19-59-05-756_00010.img");

       int k = 0;

       XYSeries RED = new XYSeries("R");   
       XYSeries GREEN = new XYSeries("G");  
       XYSeries BLUE = new XYSeries("B");
       XYSeries  UNDEFINED = new XYSeries("U");


       for (int j = 0; j < pictureHeight; j++) 
        {for (int i = 0; i < pictureWidth; i++) 
           {   R = inp.read();
               G = inp.read();
               B = inp.read();
               U = inp.read();
               Color c = new Color(R, G, B, U);
               pictureArray[k++] = c.getRGB();

               System.out.println((new Integer(i)).toString()+" "+(new Integer(j)).toString());

               RED.add(i, R);
               GREEN.add(i, B);
               BLUE.add(i, G);
               UNDEFINED.add(i, U);

           }
       }
       inp.close();

       final XYSeriesCollection dataset = new XYSeriesCollection();
       dataset.addSeries(RED);
       dataset.addSeries(GREEN);
       dataset.addSeries(BLUE);
       dataset.addSeries(UNDEFINED);

       return dataset;
       }
       catch (Exception e) {
           JOptionPane.showMessageDialog(null, e, "Exception Raised",
                   JOptionPane.INFORMATION_MESSAGE);
           return null;
       }

   }   



    }

А ниже код выпадающего списка.

![//Create ComboBox for RGB Choice
String ChannelStrings\[\] = { "All", "Red", "Green", "Blue"};
JComboBox ChannelChoice = new JComboBox(ChannelStrings);
ChannelChoice.setFont((new Font ("Arial", Font.BOLD, 13)));
panelButton.add(ChannelChoice);][1]

person michaelsteven    schedule 30.05.2014    source источник
comment
Можете дать ссылку на свой скриншот?   -  person trashgod    schedule 30.05.2014


Ответы (1)


Как показано здесь, вы можете управлять видимостью отдельных рядов с помощью метода setSeriesVisible() средства визуализации. В приведенном примере используются флажки для управления, но прослушиватель действий вашего комбо может вызывать тот же метод. ChartFactory.createXYLineChart() использует экземпляр XYLineAndShapeRenderer; вы можете получить ссылку на график диаграммы, как показано здесь.

изображение

person trashgod    schedule 30.05.2014
comment
Спасибо за это. Не могли бы вы также дать мне несколько советов, как поместить это в мой код? - person michaelsteven; 30.05.2014
comment
Вызов setSeriesVisible() поступает в прослушиватель действий вашего комбо; отредактируйте свой вопрос, включив в него полный пример, демонстрирующий ваш пересмотренный подход; в вашем примере доступ к опубликованным изображениям осуществляется через URL, как показано здесь; используйте синтетические изображения, как показано здесь; или используйте значки UIManager, как показано здесь.. - person trashgod; 30.05.2014
comment
Спасибо за подсказку. Но я до сих пор не знаю, как реализовать setSeriesVisible() в моем коде. Не могли бы вы помочь. Мне действительно нужна твоя помощь. - person michaelsteven; 05.06.2014
comment
Я не уверен, где вы застряли. Измените свой вопрос, включив в него mcve, который показывает ваш текущий подход. - person trashgod; 05.06.2014
comment
Извините, но как я могу разместить здесь дополнительный код? Я уже поместил свой код поверх этого запроса. - person michaelsteven; 05.06.2014