Guten Abend,
ich beschäftige mich grade wieder ein bisschen mit Java und dabei ist mir das tolle Framework JFreeChart über den Weg gelaufen. (Super Ding)
Mit crosshairOverlay() kann man ein Overlay über das eigentliche gezeichnete Chart legen und dann mit einem speziellen ChartMouseListener() und Crosshair() ein bewegliches Fadenkreuz erzeugen.
Crosshair() liefert darüber hinaus noch ein Label mit, auf dem der aktuelle Wert (X- bzw. Y-Achse) angezeigt wird.
Frage:
Leider habe ich bisher keine Möglichkeit gefunden die Größe dieses Labels anzupassen.
Rund um Crosshair() habe ich nichts wie
oder ähnliches gefunden.
Es gibt zwar ein
das hat allerdings keinerlei optische Auswirkungen.
BeispielCode:
Der Code ist von David Gilbert dem Entwickler von JFreeChart und nicht von mir!
Er lässt sich aber ohne Datenbank etc. öffnen, sofern man das Framework im Projekt importiert hat. Dort sieht man das kleine Label in der Grafik.
Von diesem würde ich gerne die Dimension verändern.
Auch nach Internet und Forensuche bin ich auf keine Idee gekommen, obwohl die Sache verhältnismäßig einfach aussieht !
Vielleicht kann mir jemand auf die Sprünge helfen.
Danke.
ich beschäftige mich grade wieder ein bisschen mit Java und dabei ist mir das tolle Framework JFreeChart über den Weg gelaufen. (Super Ding)
Mit crosshairOverlay() kann man ein Overlay über das eigentliche gezeichnete Chart legen und dann mit einem speziellen ChartMouseListener() und Crosshair() ein bewegliches Fadenkreuz erzeugen.
Crosshair() liefert darüber hinaus noch ein Label mit, auf dem der aktuelle Wert (X- bzw. Y-Achse) angezeigt wird.
Frage:
Leider habe ich bisher keine Möglichkeit gefunden die Größe dieses Labels anzupassen.
Rund um Crosshair() habe ich nichts wie
Java:
setPreferredSize, setMaximumSize
Es gibt zwar ein
Java:
setLabelFont()
BeispielCode:
Der Code ist von David Gilbert dem Entwickler von JFreeChart und nicht von mir!
Er lässt sich aber ohne Datenbank etc. öffnen, sofern man das Framework im Projekt importiert hat. Dort sieht man das kleine Label in der Grafik.
Von diesem würde ich gerne die Dimension verändern.
Java:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.panel.CrosshairOverlay;
import org.jfree.chart.plot.Crosshair;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.general.DatasetUtilities;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.RectangleEdge;
/**
* A demo showing crosshairs that follow the data points on an XYPlot.
*/
public class CrosshairOverlayDemo1 extends JFrame implements ChartMouseListener {
private ChartPanel chartPanel;
private Crosshair xCrosshair;
private Crosshair yCrosshair;
public CrosshairOverlayDemo1(String title) {
super(title);
setContentPane(createContent());
}
private JPanel createContent() {
JFreeChart chart = createChart(createDataset());
this.chartPanel = new ChartPanel(chart);
this.chartPanel.addChartMouseListener(this);
CrosshairOverlay crosshairOverlay = new CrosshairOverlay();
this.xCrosshair = new Crosshair(Double.NaN, Color.GRAY, new BasicStroke(0f));
this.xCrosshair.setLabelVisible(true);
this.yCrosshair = new Crosshair(Double.NaN, Color.GRAY, new BasicStroke(0f));
this.yCrosshair.setLabelVisible(true);
crosshairOverlay.addDomainCrosshair(xCrosshair);
crosshairOverlay.addRangeCrosshair(yCrosshair);
chartPanel.addOverlay(crosshairOverlay);
return chartPanel;
}
private JFreeChart createChart(XYDataset dataset) {
JFreeChart chart = ChartFactory.createXYLineChart("Crosshair Demo",
"X", "Y", dataset);
return chart;
}
private XYDataset createDataset() {
XYSeries series = new XYSeries("S1");
for (int x = 0; x < 10; x++) {
series.add(x, x + Math.random() * 4.0);
}
XYSeriesCollection dataset = new XYSeriesCollection(series);
return dataset;
}
@Override
public void chartMouseClicked(ChartMouseEvent event) {
// ignore
}
@Override
public void chartMouseMoved(ChartMouseEvent event) {
Rectangle2D dataArea = this.chartPanel.getScreenDataArea();
JFreeChart chart = event.getChart();
XYPlot plot = (XYPlot) chart.getPlot();
ValueAxis xAxis = plot.getDomainAxis();
double x = xAxis.java2DToValue(event.getTrigger().getX(), dataArea,
RectangleEdge.BOTTOM);
double y = DatasetUtilities.findYValue(plot.getDataset(), 0, x);
this.xCrosshair.setValue(x);
this.yCrosshair.setValue(y);
xCrosshair.setLabelFont(new Font("TimesRoman", Font.PLAIN, 100));//funktioniert nicht :(
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
CrosshairOverlayDemo1 app = new CrosshairOverlayDemo1(
"JFreeChart: CrosshairOverlayDemo1.java");
app.pack();
app.setVisible(true);
}
});
}
}
Auch nach Internet und Forensuche bin ich auf keine Idee gekommen, obwohl die Sache verhältnismäßig einfach aussieht !
Vielleicht kann mir jemand auf die Sprünge helfen.
Danke.