2017-12-09 11 views
3

JFreeChart에 의해 생성 된 도트를 한 줄로 변환하는 데 문제가 있습니다. 모든JFreeChart에서 어떻게 점들을 라인으로 전송할 수 있습니까?

첫째, 정말 도움이 몇 가지 소스가이 시점 둘째

이 도달이 내 코드입니다

import java.awt.BorderLayout; 
    import java.awt.Color; 
    import java.awt.Dimension; 
    import java.awt.EventQueue; 
    import java.awt.event.ActionEvent; 
    import java.util.*; 
    import javax.swing.AbstractAction; 
    import javax.swing.JButton; 
    import javax.swing.JFrame; 
    import javax.swing.JLabel; 
    import javax.swing.JPanel; 
    import javax.swing.JTextField; 
    import org.jfree.chart.*; 
    import org.jfree.chart.axis.NumberAxis; 
    import org.jfree.chart.plot.PlotOrientation; 
    import org.jfree.chart.plot.XYPlot; 
    import org.jfree.chart.renderer.xy.XYItemRenderer; 
    import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; 
    import org.jfree.data.xy.XYDataset; 
    import org.jfree.data.xy.XYSeries; 
    import org.jfree.data.xy.XYSeriesCollection; 



public class x_y_2 extends JFrame { 

private static final String title = "Connecting The Dots"; 
private XYSeries added = new XYSeries("Added"); 
private LinkedList<XYSeries> ls = new LinkedList<>(); 

public x_y_2(String s) { 
    super(s); 
    final ChartPanel chartPanel = createDemoPanel(); 
    this.add(chartPanel, BorderLayout.CENTER); 
    JPanel control = new JPanel(); 

    JLabel label = new JLabel("Enter 'x' value"); 
    JTextField Field_x = new JTextField(); 
    Field_x.setPreferredSize(new Dimension(100, 24)); 

    JLabel label2 = new JLabel("Enter 'y' value"); 
    JTextField Field_y = new JTextField(); 
    JLabel error = new JLabel("importent* in case no value is entered,value 
    is set to '1' "); 
    error.setForeground(Color.RED); 
    Field_y.setPreferredSize(new Dimension(100, 24)); 

    control.add(label); 
    control.add(Field_x); 
    control.add(label2); 
    control.add(Field_y); 

    control.add(new JButton(new AbstractAction("Add") { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
       if (Field_x.getText().isEmpty()) { 
        Field_x.setText("1"); ; 
       } 
       if (Field_y.getText().isEmpty()) { 
        Field_y.setText("1"); 
       } 
      Double x = Double.parseDouble(Field_x.getText()); 
      Double y = Double.parseDouble(Field_y.getText()); 

      added.add(x,y); 
      ls.add(added); 
      Field_x.setText(""); 
      Field_y.setText("");  
     } 
    })); 
    this.add(control, BorderLayout.SOUTH); 
    control.add(error); 
} 
private ChartPanel createDemoPanel() { 
    JFreeChart jfreechart = ChartFactory.createScatterPlot(
     title, "X", "Y", createSampleData(), 
     PlotOrientation.VERTICAL, true, true, false); 

    return new ChartPanel(jfreechart); 
} 


private XYDataset createSampleData() { 
    XYSeriesCollection xySeriesCollection = new XYSeriesCollection(); 
    xySeriesCollection.addSeries(added); 
    return xySeriesCollection; 
} 

public static void main(String args[]) { 
      x_y_2 demo = new x_y_2(title); 
      demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      demo.pack(); 
      demo.setLocationRelativeTo(null); 
      demo.setVisible(true); 

}} 
,

이 내 주요 문제는 도트를 계산하는 출력

imge of the output

의 이미지이다. 내가 어떻게 해? 이 방법을 사용하는 것과 같은 작업을 시도했습니다.

renderer.setSeriesLinesVisible 

그러나 나는 저를 위해 일하지 않았습니다.

편집 :

이 대신
JFreeChart jfreechart = ChartFactory.createXYLineChart(
    title, "X", "Y", createSampleData(), 
    PlotOrientation.VERTICAL, true, true, false); 

:

솔루션이를 넣어하는 것입니다

JFreeChart jfreechart = ChartFactory.createScatterPlot(
    title, "X", "Y", createSampleData(), 
    PlotOrientation.VERTICAL, true, true, false); 

답변

2

바와 같이 here 지적은, 당신의 선택 ChartFactory 도형을 표시하는 XYLineAndShapeRenderer를 사용하지만 줄이 아니야. 당신은

  • here을 같이 here를 같이,

  • 쓰기 당신 자신의 공장을 다른 공장을 선택하거나

  • 렌더러에 대한 참조를 확인하고 명시 적으로 라인을 볼 수 있습니다 :

    private ChartPanel createDemoPanel() { 
        JFreeChart jfreechart = ChartFactory.createScatterPlot(
         title, "X", "Y", createSampleData(), 
         PlotOrientation.VERTICAL, true, true, false); 
        XYPlot plot = jfreechart.getXYPlot(); 
        XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) plot.getRenderer(); 
        renderer.setBaseLinesVisible(true); 
        return new ChartPanel(jfreechart); 
    } 
    

image

+0

당신은 현저합니다! 나는 당신의 답을 많이 보았습니다, 정말 고마워요. – SalmanALharbi

+0

당신은 현저합니다! 나는 당신의 답을 많이 보았습니다, 정말 고마워요. 만약 당신이 시간이 있다면 또 다른 질문이 있습니다. 점을 그리는 것이 가능한지, 모든 점을 추가 한 후 알고리즘을 끝내고 시작하여 점을 그리는 것뿐입니다. 이 부분의 문제, 도움이 될만한 도움, 그래서 간단하게 제 질문입니다 : 모든 요점이 추가되었지만 일부는 아니지만 모두에게 줄을 그릴 수 있습니까? – SalmanALharbi

+0

[예제] (https://stackoverflow.com/a/29243713/230513)에 대한 사용자 지정 렌더러가 필요합니다. 새로운 질문을하면이 대답을 인용하십시오. – trashgod