有没有办法在JFreeChart中将十字线标签调整几个像素?

问题描述

该问题与我之前的问题[How to get [x,y] values from a JfreeChart to set the mouse position on screen?]有关,完整的代码如下。

应用程序运行正常,但我注意到十字线标签有时看起来有点太紧,左右边缘太窄,如以下屏幕截图所示,最上面的是现在的样子,但是我d宁愿在标签的左侧或右侧边缘添加一个额外的1或2像素,因此看起来像底部图像,感觉更舒适,我对应用程序进行了一些修改,但现在价格标签显示相同的图像每天的价值,我做错了什么?

为什么在标签中有时会有下划线[side line],有时却没有?

enter image description here

enter image description here

#dependencies: //Remove this line
Flutter:                       //And 
   #sdk: Flutter               // indent
   assets:                     // this block 
     - assets/images/pic_1.jpg // back

解决方法

价格标签每天都会显示相同的值

是的,您的yCrosshair有一个自定义CrosshairLabelGenerator,通常会返回最近的价格。幸运的是,StandardCrosshairLabelGenerator使您可以更方便地更改外观。 Internally,实现在调用labelTemplate时使用MessageFormat.format();我添加了文本和空格以突出显示效果:

yCrosshair.setLabelGenerator(new StandardCrosshairLabelGenerator(
    " Price: {0} ",NumberFormat.getCurrencyInstance()));

可以在您的自定义xCrosshair中使用类似的方法:

xCrosshair.setLabelGenerator(new StandardCrosshairLabelGenerator() {
    @Override
    public String generateLabel(Crosshair crosshair) {
        …
        long volume = item.getValue().longValue();
        String s = NumberFormat.getInstance().format(volume);
        return MessageFormat.format(" Volume: {0} ",s);
    }
});

image

此外,如here所述,覆盖getPreferredSize(),并考虑使用其他布局以更好地调整大小:

public class PriceVolume_Chart extends JPanel implements ChartMouseListener {
    …
    public PriceVolume_Chart(String Symbol,int Index) {
        super(new GridLayout());
        …
    }

    @Override
    public Dimension getPreferredSize() {
        return new Dimension(800,500);
    }
    …
}