2013-07-24 5 views
1

Я новичок в java и JFreecharts, и я использую Jfreechart для создания множества диаграмм (штрих-кодов и пиар-карт). Я показываю диаграммы как и когда они создаются. Но все диаграммы, которые генерируются, укладываются друг на друга, а последний график находится сверху. Если я закрываю последний, все диаграммы закрываются. Я хочу знать, можно ли иметь только один фрейм, и все диаграммы можно перемещать с помощью кнопки «Следующий» и «Предыдущий». Если у кого-то есть опыт в этом, пожалуйста, поделитесь. Thanks in AdvanceJfreechart: отображение нескольких диаграмм

+0

имеет меньше делать с JFreeChart, больше с Swing. С помощью JTabbedPane пользователь может сразу выбрать круговую диаграмму, так как есть вкладка «Pie». С помощью предыдущей + следующей вы можете иметь панель, которая при нажатии кнопки устанавливает следующий/предыдущий график в панель. –

+0

@JoopEggen: у меня есть 6 функций, которые вычисляют 6 разных параметров, и каждый создает Jfreechart (barchart, piechart, xylinechart). Каждый раз, когда я создаю панель, которая отображает указанный jfreechart. Затем я устанавливаю размер панели, а затем вызываю setContentPane (панель) и устанавливает видимость кадра. –

ответ

3

Для получения более подробной информации, пожалуйста, обратитесь к ниже. Лучше использовать графический редактор, подобный среде IDE NetBeans. Помните, что набирается следующее, не видя компилятора.

Поля:

private static final int CHARTS = 6; 
private int currentChartNo = 0; 
private JButton previousButton = new JButton("<"); 
private JButton nextButton = new JButton(">"); 
private JPanel currentChartPanel = new JPanel(); 
private JPanel[] chartPanels = new JPanel[CHARTS]; 

ИНИЦИАЛИЗАЦИИ в кадре:

// getContentPane(), having per default a BorderLayout. 
add(currentChartPanel , BorderLayout.CENTER); 
add(previousButton, BorderLayout.WEST); 
add(nextButton, BorderLayout.EAST); 

previousButton.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent event) { 
     if (currentChartNo > 0) { 
      getContentPane().remove(currentChartPanel); 
      --currentChartNo; 
      currentChartPanel = chartPanels[currentChartNo]; 
      getContentPane().add(currentChartPanel, BorderLayout.CENTER); 
      repaint(100L); 
     } 
    } 
}); 

Это может быть сделано лучше, с дополнительной диаграммы, содержащей панель.

2

В качестве альтернативы нескольким экземплярам ChartPanel вы можете создать серию наборов данных и обновить одну панель, как показано на рисунке here.

image

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