Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

JFreeChart上の画像がぼやけて表示されるのは?

JPanel上にJFreeChartを使用して折れ線グラフを表示しています。
マーカー上のポイントをマウスクリックすると以下のコードで透過処理されたサークル状の画像を表示させているのですが、この表示された画像が何故かぼやけて表示されます。他の画像でも試してみたものの上記と同様の結果でした。
何故ぼやけてしまうのかがわかりません。
どうか教えて下さい。
よろしくお願いします。

public void chartMouseClicked(ChartMouseEvent e) {
    //---ポイント上にグリーンのサークル画像(サイズ24)
    ImageIcon cic = new ImageIcon(getClass().getResource("circle-24.png"));
    //サークルを指定位置に
    XYAnnotation xya = new XYImageAnnotation(ax, ay, cic.getImage());
    //画像表示
    plot.addAnnotation(xya); 

1

回答

2983

閲覧

1件の回答

評価

0

自己解決しました。
折れ線グラフのマーカー上にサークル画像を表示することを再考した結果、以下のようにサークルを描画するように変更することで解決しました。

public void chartMouseClicked(ChartMouseEvent e) {
    final CircleDrawer cdr = new CircleDrawer(Color.red, new BasicStroke(3.0f), null);
    final XYAnnotation Bid = new XYDrawableAnnotation(ax, ay, 24, 24, cdr);
    plot.addAnnotation(Bid);



CircleDrawerのコードは以下になります。
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Paint;
import java.awt.Stroke;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Line2D;
import java.awt.geom.Rectangle2D;

import org.jfree.ui.Drawable;

public class CircleDrawer implements Drawable {   

    public CircleDrawer(Paint outlinePaint,    
                        Stroke outlineStroke,    
                        Paint fillPaint) {   
        this.outlinePaint = outlinePaint;   
        this.outlineStroke = outlineStroke;   
        this.fillPaint = fillPaint;   
    }   
   
    public void draw(Graphics2D g2, Rectangle2D area) {   
        Ellipse2D ellipse = new Ellipse2D.Double(area.getX(), area.getY(),   
                                                 area.getWidth(), area.getHeight());   
        if (this.fillPaint != null) {   
            g2.setPaint(this.fillPaint);   
            g2.fill(ellipse);   
        }   
        if (this.outlinePaint != null && this.outlineStroke != null) {   
            g2.setPaint(this.outlinePaint);   
            g2.setStroke(this.outlineStroke);   
            g2.draw(ellipse);   
        }   
   
        g2.setPaint(Color.black);   
        g2.setStroke(new BasicStroke(1.0f));   
        Line2D line1 = new Line2D.Double(area.getCenterX(), area.getMinY(),   
                                         area.getCenterX(), area.getMaxY());   
        Line2D line2 = new Line2D.Double(area.getMinX(), area.getCenterY(),   
                                         area.getMaxX(), area.getCenterY());   
        g2.draw(line1);   
        g2.draw(line2);   
    }   
}

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。