浏览 3112 次
锁定老帖子 主题:Jrobin图表字体问题
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-14
下面是我写的生成和读取jrobin图表的简单例子: import java.awt.Color; import java.awt.Font; import java.io.IOException; import org.jrobin.core.RrdDb; import org.jrobin.core.RrdDef; import org.jrobin.core.RrdException; import org.jrobin.core.Sample; import org.jrobin.core.Util; import org.jrobin.graph.RrdGraph; import org.jrobin.graph.RrdGraphDef; public class create { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub long end = Util.getTime(), start = end - 7 * 86400; // 截至时间为当前时间,起始时间为一周前 String rrdFile = "demo.rrd"; // 创建数据文件定义,保存日数据与周数据 try { RrdDef rrdDef = new RrdDef(rrdFile, start - 1, 300); // 数据间隔为300秒 rrdDef .addDatasource("value1", "GAUGE", 600, Double.NaN, Double.NaN); // 定义数据源,可以定义多个 rrdDef .addDatasource("value2", "GAUGE", 800, Double.NaN, Double.NaN); // 以下定义归档数据,即如何保存数据 rrdDef.addArchive("AVERAGE", 0.5, 1, 288); // 输入给数据源的数据每一个都保存下来,保存288笔数据,即保存最近一天的数据 rrdDef.addArchive("AVERAGE", 0.5, 7, 288); // 每7笔数据,取平均值,然后保存,保存288笔数据,即保存最近一周的数据 RrdDb rrdDb = new RrdDb(rrdDef); // 采用三角函数生成数据 for (long t = start; t < end; t += 300) { Sample sample = rrdDb.createSample(t); sample.setValue("value1", Math.sin(2 * Math.PI * (t / 86400.0)) * 50 + 50); sample.setValue("value2", 60); sample.update(); } String pngFile = ""; RrdGraphDef gDef = null; // 生成最近一天的图形 pngFile = "demoday.png"; gDef = new RrdGraphDef(); gDef.setFilename(pngFile); gDef.setWidth(450); gDef.setHeight(250); gDef.setImageFormat("png"); gDef.setTimeSpan(end - 86400, end); gDef.setTitle("JRobin Demo 每天"); gDef.datasource("demo1", rrdFile, "value2", "AVERAGE"); gDef.line("demo1", Color.blue, "阀值"); gDef.datasource("demo", rrdFile, "value1", "AVERAGE"); gDef.line("demo", Color.GREEN, "real"); gDef.gprint("demo", "MIN", "%5.1lf Min"); gDef.gprint("demo", "AVERAGE", "%5.1lf Avg"); gDef.gprint("demo", "MAX", "%5.1lf Max"); gDef.setSmallFont(new Font("Monospaced", Font.PLAIN, 11)); gDef.setLargeFont(new Font("SansSerif", Font.BOLD, 14)); new RrdGraph(gDef); // 生成最近一周的图形 pngFile = "demoweek.png"; gDef = new RrdGraphDef(); gDef.setFilename(pngFile); gDef.setWidth(450); gDef.setHeight(250); gDef.setImageFormat("png"); gDef.setTimeSpan(end - 7 * 86400, end); gDef.setTitle("JRobin Demo 我的"); gDef.datasource("demo", rrdFile, "value1", "AVERAGE"); gDef.line("demo", Color.GREEN, "real"); gDef.gprint("demo", "MIN", "%5.1lf Min"); gDef.gprint("demo", "AVERAGE", "%5.1lf Avg"); gDef.gprint("demo", "MAX", "%5.1lf Max"); // 如果需要显示中文,以下两条语句比较重要 gDef.setSmallFont(new Font("Monospaced", Font.PLAIN, 11)); gDef.setLargeFont(new Font("SansSerif", Font.BOLD, 14)); new RrdGraph(gDef); } catch (RrdException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 根据数据定义创建数据文件 } } 其中设置字体的代码为: gDef.setSmallFont(new Font("Monospaced", Font.PLAIN, 11)); gDef.setLargeFont(new Font("SansSerif", Font.BOLD, 14)); 解释: monospaced,是一种逻辑字体,它在不同语言的操作系统下会映射为不同的物理字体,一般英文操作系统会把monospaced映射为Courier New,显示代码很好看,然而来到中文的操作系统时就被映射到宋体上了。修改的方法如下: 1。 进入到JDK_HOME/jre/lib目录,备份fontconfig.properties.src文件; 2。 打开fontconfig.properties.src,找到这一行:sequence.monospaced.GBK=chinese-ms936, alphabetic, dingbats, symbol 可在这里重新设置你喜欢的字体。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |