2016-10-06 2 views
-3

Я создал несколько диаграмм в соответствии с назначением и для анализа данных. Я хотел бы, чтобы ось домена масштабировалась по моим спецификациям, а не автоматически подбирала данные в каждом серии.не может получить доступ к методу setDomainAxis() в моем графике JFreeChart

Я нашел решение здесь, который, казалось, очень просто следовать: JFReeChart x axis scale

Однако, после того, как я создаю мой участок, с ниже код, кажется, что метод не существует.

Является ли метод setDomainAxis() тем, который включен в библиотеки, или мне нужно его самостоятельно создать? Или я нарушил какое-то фундаментальное правило java, которое не имеет никакого отношения к JFreeChart? Я начинающий Java-программист, поэтому, пожалуйста, сообщите свой ответ соответственно. Благодаря!

Вот мой класс графика XY:

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);   


    } 
+0

Если метод не существует, вы получите ошибку компилятора. Но метод находится в классе XYPlot. Возможно, сначала попробуйте установить setDomainAxis(), а затем createChart() ... – PeterMmm

+0

@PeterMmm Ok! Я отдам его. Я написал класс XYPlot на основе учебников, которые были найдены на форумах JFreeChart и в других местах.Нигде я не могу найти образец того, как такой метод может быть создан, поэтому я предположил, что он был частью загрузки библиотеки. – rocksNwaves

ответ

1

вашего фрагмента из XYPlot несовместим с API. В частности, такого конструктора нет, и нет метода с именем createChart(). Убедитесь, что вы используете текущую версию, 1.0.19, доступно here.

Методы ChartFactory - отличное руководство по созданию диаграммы из отдельных подкомпонентов. В качестве конкретного примера приводится ChartFactory.createXYLineChart()here. Обратите внимание, как оси передаются в конструктор 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 - отличная возможность учиться.

+0

Спасибо @trashgod. Я добавлю код, где я сам создал этот метод (как видно в другом месте в Интернете). Я недостаточно продвинутый, чтобы понять API, поскольку мой технический словарь равен нулю. Может быть, вы можете сделать второй взгляд после того, как я отредактирую, чтобы добавить дополнительный код. – rocksNwaves

+0

Я изложил подход выше; полный редизайн выходит за рамки сайта, но я ответил, что вы оригинальный вопрос; вы можете принять этот ответ, щелкнув по [пустой галочке] (http://meta.stackoverflow.com/a/5235/163188) слева; если вы зададите новый вопрос, пожалуйста, укажите [mcve], который показывает ваш пересмотренный подход. – trashgod

+0

Обновление полезно. Я жду, чтобы щелкнуть галочку, пока не почувствую, что на этот вопрос был законный ответ, а также дать время другим, чтобы предоставить мне другие, уникальные подходы. Я хорошо знаю, что делает эта галочка, но вы ответили на несколько моих вопросов о JFreeChart, предоставив информацию, не имеющую никакого отношения к заданному вопросу, и заставили меня почувствовать, что вы просто хотите набирать интернет-очки. Я уважаю ваши знания, которые, очевидно, обширны и значительно больше, чем мои собственные, но я не здесь, чтобы подтвердить это для вас. – rocksNwaves

Смежные вопросы