XYPlotに十字オーバーレイを使用しようとしています。これはかなりうまくいきますが、ラベルを描く方法を変更したいと思います。私はテキストの周囲にボックスを削除したいとフォントを制御したいと思い、スタートとしてJFreeChartのクロスヘアオーバーレイを変更/カスタマイズするには?
:これは、次のラベルになり
// add crosshair
final CrosshairOverlay crosshairOverlay = new CrosshairOverlay();
final Crosshair xCrosshair = new Crosshair(Double.NaN, Color.DARK_GRAY, new BasicStroke(0f));
xCrosshair.setLabelBackgroundPaint(new Color(1f, 1f, 1f, 0f));
xCrosshair.setLabelOutlineVisible(false);
xCrosshair.setLabelVisible(true);
xCrosshair.setLabelGenerator(new CrosshairLabelGenerator() {
@Override
public String generateLabel(final Crosshair ch) {
return UnitConverter.freq2Str(ch.getValue());
}
});
final Crosshair yCrosshair = new Crosshair(Double.NaN, Color.DARK_GRAY, new BasicStroke(0f));
yCrosshair.setLabelBackgroundPaint(new Color(1f, 1f, 1f, 0f));
yCrosshair.setLabelVisible(true);
yCrosshair.setLabelOutlineVisible(false);
yCrosshair.setLabelGenerator(new CrosshairLabelGenerator() {
@Override
public String generateLabel(final Crosshair ch) {
return UnitConverter.val2Str(ch.getValue(), 5, "dBc/Hz");
}
});
crosshairOverlay.addDomainCrosshair(xCrosshair);
crosshairOverlay.addRangeCrosshair(yCrosshair);
this.addOverlay(crosshairOverlay);
this.addChartMouseListener(new ChartMouseListener() {
@Override
public void chartMouseMoved(final ChartMouseEvent event) {
final Rectangle2D dataArea = APChartPanel.this.getScreenDataArea();
final XYPlot plot = (XYPlot) event.getChart().getPlot();
final double x = plot.getDomainAxis().java2DToValue(event.getTrigger().getX(), dataArea, RectangleEdge.BOTTOM);
final double y = plot.getRangeAxis().java2DToValue(event.getTrigger().getY(), dataArea, RectangleEdge.LEFT);
xCrosshair.setValue(x);
yCrosshair.setValue(y);
}
@Override
public void chartMouseClicked(final ChartMouseEvent arg0) {}
});
:これは私の現在のスニペットですサイズと家族。しかし、Crosshair#setLabelOutlineVisible(boolean)
を使用するとテキストが削除され、Crosshair#setLabelFont(Font)
はフォントをまったく変更しません。これはまだ進行中ですか?何か間違っていますか?
私は、次の解決策になった:@trashgodの提案をCrosshairOverlay
を拡張し、個々の十字のために、このコードを使用して
:
final Crosshair yCrosshair = new Crosshair(Double.NaN, Color.GRAY, new BasicStroke(0f));
yCrosshair.setLabelBackgroundPaint(new Color(1f, 1f, 1f, 0.7f));
yCrosshair.setLabelPaint(Color.GRAY);
yCrosshair.setLabelVisible(true);
yCrosshair.setLabelOutlineVisible(false);
yCrosshair.setLabelFont(yCrosshair.getLabelFont().deriveFont(11f));
yCrosshair.setLabelGenerator(new CrosshairLabelGenerator() {
@Override
public String generateLabel(final Crosshair ch) {
return UnitConverter.val2Str(ch.getValue(), 5, "dBc/Hz");
}
});
速い返信をありがとう。私は何か間違っていることを望んだが、これはまだ完全に終了していないようだ(恐らく決してないだろう)。しかし、「CrosshairOverlay」を拡張することは、実際には予想よりも邪魔になりませんでした。結果のスクリーンショットを追加しました。 – brimborium
@ブリムボリウム:喜んで助けました。パッチが提出されている[ここ](http://www.jfree.org/forum/viewtopic.php?f=3&t=117824)。 – trashgod