Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法访问JFreeChart绘图中的setDomainAxis()方法_Java_Jfreechart - Fatal编程技术网

Java 无法访问JFreeChart绘图中的setDomainAxis()方法

Java 无法访问JFreeChart绘图中的setDomainAxis()方法,java,jfreechart,Java,Jfreechart,我已经根据任务生成了一些图表,对于数据分析,我希望域轴能够根据我的规范进行缩放,而不是自动适应每个系列中的数据 我在这里找到了一个解决方案,看起来很简单: 然而,在我创建了我的绘图之后,使用下面的代码,似乎该方法不存在 setDomainAxis()方法是库中包含的方法,还是我必须自己创建它?或者我违反了java的一些与JFreeChart无关的基本规则?我是一名java程序员初学者,因此请相应地告知您的答案。谢谢 这是我的XYPlot类: public class XYPlot extends

我已经根据任务生成了一些图表,对于数据分析,我希望域轴能够根据我的规范进行缩放,而不是自动适应每个系列中的数据

我在这里找到了一个解决方案,看起来很简单:

然而,在我创建了我的绘图之后,使用下面的代码,似乎该方法不存在

setDomainAxis()方法是库中包含的方法,还是我必须自己创建它?或者我违反了java的一些与JFreeChart无关的基本规则?我是一名java程序员初学者,因此请相应地告知您的答案。谢谢

这是我的XYPlot类:

public class XYPlot extends JFrame {

    private String title;
    private String xAxis;
    private String yAxis; 
    private XYSeriesCollection dataset;

    public XYPlot(String header, String graphTitle, String xax, String yax) {
        super(header);
        xAxis = xax;
        yAxis = yax;
        title = graphTitle;
        XYPlot myPlot;
       // dataset = dat;

    } 

    public void setTit(String newTitle){
        title = newTitle;
    }

    public void setXAxis(String X){
        xAxis = X;
    }

    public void setYAxis(String Y){
        xAxis = Y;
    }

    public void passData(XYSeriesCollection data){
        dataset = data;
    }

    public void createChart(XYSeriesCollection dataIn){
        final JFreeChart chart = ChartFactory.createXYLineChart(
                title,
                xAxis,
                yAxis, 
                dataIn       
        );

        final ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(1200, 800));
        setContentPane(chartPanel);      


    }
这是我的主程序中的绘图实现:

public static void seriesPlotter(XYSeriesCollection dataset, String title, String header, String xAxis, String yAxis) {

        XYPlot myPlot = new XYPlot(header, title, xAxis, yAxis);
        myPlot.createChart(dataset);
        NumberAxis domain = new NumberAxis();
        domain.setTickUnit(1);
        myPlot.setDomainAxis(domain);
        myPlot.pack();
        myPlot.setVisible(true);        


    }
您的片段的使用与API不一致。特别是,没有这样的构造函数,也没有名为
createChart()
的方法。确认您正在使用可用的当前版本
1.0.19

方法是从单个子组件创建图表的极好指南。作为一个具体的例子,本文对其进行了概述。请注意轴是如何传递给
XYPlot
构造函数的,从而无需显式调用
setDomainAxis()
。概括地说

// axes
NumberAxis domain = new NumberAxis(xAxis);
NumberAxis range = new NumberAxis(yAxis);
// renderer
XYItemRenderer renderer = new XYLineAndShapeRenderer(true, false);
// plot
XYPlot plot = new XYPlot(dataset, domain, range, renderer);
// chart
JFreeChart chart = new JFreeChart(
    title", JFreeChart.DEFAULT_TITLE_FONT, plot, false);
也许你可以在我编辑后再看一下,添加额外的代码

  • 您的
    XYPlot
    是一个
    JFrame
    ,它没有
    setDomainAxis()
    方法;重命名类以避免冲突,例如
    MyXYPlot

  • 让重命名的类有一个成员变量来保存对
    org.jfree.chart.plot.XYPlot
    的引用,并添加一个方法来更新名称

    XYPlot myPlot;
    …
    public void setDomainAxisName(String name){
        myPlot.getDomainAxis().setLabel(name);
    }
    
  • 没有理由扩展
    JFrame

我的技术词汇是零


使用
JFreeChart
进行实验是一个很好的学习机会。

如果该方法不存在,您将得到一个编译器错误。但是该方法在XYPlot类中。也许先尝试设置setDomainAxis(),然后再设置createChart()…@petermm好的!我要试一试。我根据JFreeChart论坛和其他地方的教程编写了XYPlot类。我在任何地方都找不到这样一个方法是如何创建的示例,所以我假设它是库下载的一部分。谢谢@trashgood。我将在自己创建该方法的地方添加代码(在internet上的其他地方可以看到)。由于我的技术词汇为零,我还没有足够的能力理解API。也许你可以在我编辑后再看一下,添加额外的代码;一个完整的重新设计超出了网站的范围,但我已经回答了你最初的问题;您可以通过单击左侧的接受此答案;如果您提出了新问题,请附上一份说明您修改方法的报告。更新内容非常有用。我等待着点击复选标记,直到我觉得这个问题已经得到了合理的回答,并且给其他人时间为我提供其他独特的方法。我很清楚复选标记的作用,但您已经回答了我关于JFreeChart的几个问题,提供了与所问问题无关的信息,这让我觉得您只是想收集互联网上的酷点。我尊重你的知识,这显然是广泛的,远远大于我自己的知识,但我不是来为你证实这一点的;我的目标是为有趣的问题创造有用的答案;您的更新说明了几个常见的设计缺陷;除了回答你的问题之外,我很高兴向他们发表讲话;您应该只接受最能代表您采用的解决方案的答案;请随意将问题留给更好的答案。