Java 如何在JFreeChart中将点转换为线?
我在将JFreeChart生成的点转换为直线时遇到问题 首先,有一些来源确实帮助我达到了这一点Java 如何在JFreeChart中将点转换为线?,java,jfreechart,Java,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 jav
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);
}}
但是,我没有为自己工作
编辑:
解决方案简单地说就是:
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);
如上所述,您选择的ChartFactory
使用显示形状但不显示线条的。你可以
- 选择其他工厂,如图所示
- 写下您自己的工厂,如图所示,或
- 获取对渲染器的引用,并使线显式可见:
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); }
你太出色了!我已经看到了很多你的答案,非常感谢。如果你有时间的话,我还有一个问题。。是否可以只画点,然后在添加所有点并单击“完成”后,算法将开始,只画一条线到某个点,但不是所有点,我确实对这部分有问题,我将感谢您的任何帮助,所以我的问题很简单:所有的点都被添加了,我可以画一条线到一些点而不是全部点吗;如果你提出一个新问题,请引用这个答案。
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);
}