package PDVGUI.gui.utils; import PDVGUI.gui.MSDataDisplay; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.block.BlockBorder; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.xy.XYDataset; import javax.swing.*; import java.awt.*; import java.util.ArrayList; import java.util.HashMap; import static PDVGUI.gui.utils.ChartUtils.creatMultiXYDataset; import static PDVGUI.gui.utils.ChartUtils.creatXYDataset; /** * TIC panel * Created by Ken on 10/26/2017. */ public class TICPanel extends JPanel{ private JPanel viewJPanel; /** * Spectrum file name */ private String spectrumFileName; /** * Spectrum key to RT and intensity */ private HashMap<String, ArrayList<float[]>> keyToRtAndInt; /** * Parent class */ private MSDataDisplay msDataDisplay; /** * Chart panel */ private ChartPanel chartPanel; /** * Constructor */ public TICPanel(MSDataDisplay msDataDisplay){ this.msDataDisplay = msDataDisplay; initComponents(); } /** * Update panel * @param spectrumFileName Spectrum file name * @param keyToRtAndInt Key to RT and intensity * @param mode Mode */ public void updatePanel(String spectrumFileName, HashMap<String, ArrayList<float[]>> keyToRtAndInt, Integer mode, Integer topNum){ this.spectrumFileName = spectrumFileName; this.keyToRtAndInt = keyToRtAndInt; processData(mode, topNum); } /** * Update panel * @param nameToKeyToRtAndInt File name to spectrum key to RT and intensity * @param mode Mode */ public void updatePanel(HashMap<String, HashMap<String, ArrayList<float[]>>> nameToKeyToRtAndInt, Integer mode, Integer topNum){ XYDataset xyDataset = creatMultiXYDataset(nameToKeyToRtAndInt, mode, topNum); JFreeChart chart = ChartFactory.createXYLineChart("TIC","Elution Time","Intensity (10^" + (topNum.toString().length() - 1) +")", xyDataset, PlotOrientation.VERTICAL,true,false,false); ChartUtils.setAntiAlias(chart); ChartUtils.setLineRender(chart.getXYPlot()); chart.getLegend().setFrame(new BlockBorder(Color.WHITE)); viewJPanel.removeAll(); chartPanel = new LineChart(msDataDisplay, chart); GroupLayout viewJPanelLayout = new GroupLayout(viewJPanel); viewJPanel.setLayout(viewJPanelLayout); viewJPanelLayout.setHorizontalGroup( viewJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(viewJPanelLayout.createSequentialGroup() .addComponent(chartPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) ) ); viewJPanelLayout.setVerticalGroup( viewJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(viewJPanelLayout.createSequentialGroup() .addComponent(chartPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) ) ); viewJPanel.revalidate(); viewJPanel.repaint(); } /** * Get chart panel * @return Chartpanel */ public ChartPanel getChartPanel(){ return chartPanel; } /** * Init all GUI components */ private void initComponents(){ viewJPanel = new JPanel(); viewJPanel.setOpaque(false); viewJPanel.setBackground(Color.white); GroupLayout layout = new GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(viewJPanel, GroupLayout.DEFAULT_SIZE, 1000, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) .addComponent(viewJPanel, GroupLayout.DEFAULT_SIZE, 900, Short.MAX_VALUE)) ); } /** * Process data * @param mode Mode */ private void processData(Integer mode, Integer topNum){ XYDataset xyDataset = creatXYDataset(keyToRtAndInt, mode, topNum); JFreeChart chart = ChartFactory.createXYLineChart("TIC","Elution Time","Intensity (10^" + (topNum.toString().length() - 1) + ")", xyDataset, PlotOrientation.VERTICAL,true,false,false); ChartUtils.setAntiAlias(chart); ChartUtils.setLineRender(chart.getXYPlot()); chart.getLegend().setFrame(new BlockBorder(Color.WHITE)); viewJPanel.removeAll(); ChartPanel chartPanel = new LineChart(msDataDisplay, chart); GroupLayout viewJPanelLayout = new GroupLayout(viewJPanel); viewJPanel.setLayout(viewJPanelLayout); viewJPanelLayout.setHorizontalGroup( viewJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(viewJPanelLayout.createSequentialGroup() .addComponent(chartPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) ) ); viewJPanelLayout.setVerticalGroup( viewJPanelLayout.createParallelGroup(GroupLayout.Alignment.LEADING) .addGroup(viewJPanelLayout.createSequentialGroup() .addComponent(chartPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) ) ); viewJPanel.revalidate(); viewJPanel.repaint(); } }