Мне нужно поместить свиток в диаграмму без, но я не могу использовать javax.swing, просто используя swt.
Я хочу поместить ограниченное количество элементов на оси категорий, может быть, 100 или200, очевидно, вам нужна прокрутка для просмотра всех данных по оси X.
Я реализовал набор данных своей диаграммы с помощью SlidingCategoryDataset, но прокрутка просто работает с частью среза элементов,
Это методы, которые создают диаграмму и набор данных:
private static CategoryDataset createDataset() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int i = 0; i < 50; i++)
dataset.addValue(Math.random() * 100D, "S1", "S" + i);
return dataset;
}
private static JFreeChart createGraficaY(SlidingCategoryDataset slidingDataSet) {
JFreeChart chart = ChartFactory.createAreaChart(
"",
"",
"Y",
slidingDataSet,
PlotOrientation.VERTICAL,
true,
true,
false
);
CategoryPlot plot = (CategoryPlot) chart.getPlot();
int alpha = 127;
Paint serie_2017 = new Color(0,150,194,alpha);
Paint serie_2018 = new Color(0,216,180,alpha);
AreaRenderer r = new AreaRenderer();
r.setSeriesPaint(0, serie_2017);
r.setSeriesPaint(1, serie_2018);
plot.setRenderer(r);
plot.setDatasetRenderingOrder(DatasetRenderingOrder.FORWARD);
plot.setBackgroundPaint(Color.white);
plot.setRangeGridlinesVisible(true);
plot.setRangeGridlinePaint(Color.BLACK);
plot.setDomainGridlinesVisible(false);
plot.setDomainGridlinePaint(Color.BLACK);
plot.setOutlineVisible(false);
plot.setOutlinePaint(Color.white);
chart.getLegend().setFrame(BlockBorder.NONE);
return chart;
}
Это основной класс:
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell( display );
shell.setLayout( new FillLayout() );
final ScrolledComposite scrolledComposite = new ScrolledComposite( shell, SWT.H_SCROLL);
scrolledComposite.setExpandVertical( true );
scrolledComposite.setExpandHorizontal( true );
scrolledComposite.setAlwaysShowScrollBars( true );
SlidingCategoryDataset dataset = new SlidingCategoryDataset(createDataset(), 0, 10);
JFreeChart chart =createGraficaY(dataset);
chart.removeLegend();
final ChartComposite chartComposite = new ChartComposite(scrolledComposite, SWT.NONE, chart,
true);
scrolledComposite.setContent(chartComposite);
scrolledComposite.setExpandVertical(true);
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setMinSize(chartComposite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
scrolledComposite.addListener( SWT.Resize, event -> {
int width = scrolledComposite.getClientArea().width;
scrolledComposite.setMinSize( shell.computeSize( width, SWT.DEFAULT ) );
} );
shell.setSize( 300, 300 );
shell.open();
while( !shell.isDisposed() ) {
if( !display.readAndDispatch() )
display.sleep();
}
display.dispose();
}
Этот код не работает, что я хочу, потому что сначала просто прокручиваем 10элементы:
ScrollCompositeChart_1
ScrollCompositeChart_2
Не могли бы вы помочь с этим кодом?Есть ли способ сделать это только с помощью SWT?Я не могу использовать качели ...
Спасибо.