use of org.jfree.chart.entity.LegendItemEntity in project SIMVA-SoS by SESoS.
the class LegendItemBlockContainer method draw.
/**
* Draws the block within the specified area.
*
* @param g2 the graphics device.
* @param area the area.
* @param params passed on to blocks within the container
* (<code>null</code> permitted).
*
* @return An instance of {@link EntityBlockResult}, or <code>null</code>.
*/
@Override
public Object draw(Graphics2D g2, Rectangle2D area, Object params) {
// draw the block without collecting entities
super.draw(g2, area, null);
EntityBlockParams ebp;
BlockResult r = new BlockResult();
if (params instanceof EntityBlockParams) {
ebp = (EntityBlockParams) params;
if (ebp.getGenerateEntities()) {
EntityCollection ec = new StandardEntityCollection();
LegendItemEntity entity = new LegendItemEntity((Shape) area.clone());
entity.setSeriesIndex(this.series);
entity.setSeriesKey(this.seriesKey);
entity.setDataset(this.dataset);
entity.setToolTipText(getToolTipText());
entity.setURLText(getURLText());
ec.add(entity);
r.setEntityCollection(ec);
}
}
return r;
}
use of org.jfree.chart.entity.LegendItemEntity in project mafscaling by vimsh.
the class LogView method createWotChart.
protected void createWotChart() {
wotMarker = new XYDomainMutilineAnnotation();
wotMarker.setDefaultPaint(Color.WHITE);
JFreeChart chart = ChartFactory.createXYLineChart(null, null, null, null, PlotOrientation.VERTICAL, false, true, false);
wotChartPanel = new ChartPanel(chart, true, true, true, true, true);
wotChartPanel.setFocusable(true);
wotChartPanel.setAutoscrolls(true);
chart.setBackgroundPaint(chartColor);
wotPlot = chart.getXYPlot();
wotPlot.setRangePannable(true);
wotPlot.setDomainPannable(true);
wotPlot.setDomainGridlinePaint(Color.LIGHT_GRAY);
wotPlot.setRangeGridlinePaint(Color.LIGHT_GRAY);
wotPlot.setBackgroundPaint(chartBgColor);
wotPlot.addAnnotation(wotMarker);
wotPlot.setRangeAxis(null);
NumberAxis xAxis = new NumberAxis();
xAxis.setAutoRangeIncludesZero(false);
xAxis.setTickLabelPaint(Color.WHITE);
xAxis.setLabelPaint(Color.LIGHT_GRAY);
wotPlot.setDomainAxis(0, xAxis);
wotPlot.setDataset(0, new XYSeriesCollection());
wotPlot.mapDatasetToDomainAxis(0, 0);
wotPlot.mapDatasetToRangeAxis(0, 0);
LegendTitle legend = new LegendTitle(wotPlot);
legend.setItemFont(new Font("Arial", 0, 10));
legend.setPosition(RectangleEdge.TOP);
legend.setItemPaint(Color.WHITE);
chart.addLegend(legend);
wotChartPanel.addChartMouseListener(new ChartMouseListener() {
@Override
public void chartMouseMoved(ChartMouseEvent event) {
try {
wotPlot.clearRangeMarkers();
wotMarker.clearLabels(false);
Rectangle2D dataArea = wotChartPanel.getChartRenderingInfo().getPlotInfo().getDataArea();
Point2D p = wotChartPanel.translateScreenToJava2D(event.getTrigger().getPoint());
double x = wotPlot.getDomainAxis().java2DToValue(p.getX(), dataArea, wotPlot.getDomainAxisEdge());
XYSeriesCollection dataset;
XYSeries series;
for (int i = 0; i < wotPlot.getDatasetCount(); ++i) {
dataset = (XYSeriesCollection) wotPlot.getDataset(i);
if (dataset != null && dataset.getSeriesCount() > 0) {
for (int j = 0; j < dataset.getSeriesCount(); ++j) {
series = dataset.getSeries(j);
int idx = 0;
double closest;
double pclosest = Math.abs(series.getX(0).doubleValue() - x);
for (int k = 1; k < series.getItemCount(); ++k) {
closest = Math.abs(series.getX(k).doubleValue() - x);
if (closest < pclosest) {
idx = k;
pclosest = closest;
}
}
double x0 = series.getX(0).doubleValue();
double x1 = series.getX(series.getItemCount() - 1).doubleValue();
double xerr = x0 * 0.01;
if (x >= (x0 - xerr) && x <= (x1 + xerr))
wotMarker.addLabel(series.getDescription() + ": ", wotPlot.getRenderer(i).getSeriesPaint(j), series.getY(idx).toString(), false);
}
}
}
if (wotMarker.count() > 0) {
boolean isLeft = (p.getX() < (dataArea.getMaxX() - dataArea.getMinX()) / 2) ? true : false;
if (isLeft) {
wotMarker.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
wotMarker.setLabelTextAnchor(TextAnchor.TOP_LEFT);
} else {
wotMarker.setLabelAnchor(RectangleAnchor.TOP_LEFT);
wotMarker.setLabelTextAnchor(TextAnchor.TOP_RIGHT);
}
wotMarker.setValue(x);
}
wotChartPanel.repaint();
} catch (Exception ex) {
ex.printStackTrace();
logger.error(ex);
}
}
@Override
public void chartMouseClicked(ChartMouseEvent event) {
wotChartPanel.requestFocusInWindow();
ChartEntity entity = event.getEntity();
if (entity == null || !(entity instanceof LegendItemEntity))
return;
LegendItemEntity itemEntity = (LegendItemEntity) entity;
int seriesIndex = ((XYDataset) itemEntity.getDataset()).indexOf(itemEntity.getSeriesKey());
XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) wotChartPanel.getChart().getXYPlot().getRenderer();
Paint p = renderer.getSeriesPaint(seriesIndex);
colorChooser.setColor((Color) p);
final ColorPreviewPanel preview = new ColorPreviewPanel(colorChooser);
colorChooser.setPreviewPanel(preview);
AbstractColorChooserPanel[] panels = colorChooser.getChooserPanels();
for (AbstractColorChooserPanel accp : panels) {
if (!accp.getDisplayName().equals("Swatches")) {
colorChooser.removeChooserPanel(accp);
}
}
ColorSelectionModel model = colorChooser.getSelectionModel();
model.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent event) {
ColorSelectionModel model = (ColorSelectionModel) event.getSource();
preview.setColor(model.getSelectedColor());
}
});
if (JOptionPane.OK_OPTION == JOptionPane.showConfirmDialog(null, colorChooser, "Select new color for " + itemEntity.getSeriesKey(), JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE))
renderer.setSeriesPaint(seriesIndex, colorChooser.getColor());
}
});
wotChartPanel.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
if (!wotChartPanel.hasFocus())
return;
int keyCode = e.getKeyCode();
if (keyCode < KeyEvent.VK_LEFT || keyCode > KeyEvent.VK_DOWN)
return;
ValueAxis axis = null;
if (keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_RIGHT)
axis = ((XYPlot) wotChartPanel.getChart().getXYPlot()).getDomainAxis();
else
axis = ((XYPlot) wotChartPanel.getChart().getXYPlot()).getRangeAxis();
if (axis != null) {
double delta = (axis.getUpperBound() - axis.getLowerBound()) / 100.0;
if (keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_DOWN)
axis.setRange(axis.getLowerBound() - delta, axis.getUpperBound() - delta);
else if (keyCode == KeyEvent.VK_UP || keyCode == KeyEvent.VK_RIGHT)
axis.setRange(axis.getLowerBound() + delta, axis.getUpperBound() + delta);
}
}
public void keyReleased(KeyEvent arg0) {
}
public void keyTyped(KeyEvent arg0) {
}
});
}
Aggregations