特定区域的代码在我的Visualise2D. class中画布和打印的渲染器是相同的,它们都称为Visualise2D. class。
Visualise2D中的一些代码
public void paintSurfaceTimes(Graphics2D gTimes, SurfaceConnector s, Dummy d, Color c, Rectangle2D bounds,double scale, double enhanceTie, double enhance ){
gTimes.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
FontMetrics fm = gTimes.getFontMetrics();
double hEdge = (UnitConvert.pixelsToMeters(LiteTieTRIAL.averageSize));
double x1 =((d.getEasting() - bounds.getX()));
double y1 = (bounds.getHeight() + bounds.getY() - d.getNorthing());
if (d instanceof Hole) {
hEdge = (UnitConvert.pixelsToMeters(((Hole) d).getDiameter()* enhance)/2);
}
else
hEdge = (UnitConvert.pixelsToMeters(LiteTieTRIAL.averageSize * enhance)/2);
x1 =((d.getEasting() - bounds.getX()));
y1 = (bounds.getHeight() + bounds.getY() - d.getNorthing());
gTimes.setColor(c);
gTimes.setFont(DEFAULT_FONT);
fm = gTimes.getFontMetrics();
gTimes.drawString((dec0P.format(s.getTime())),
(int)((x1+hEdge*Math.cos(180))*scale - fm.getStringBounds(dec0P.format(s.getTime()), gTimes).getWidth()),
(int)((y1 - hEdge*Math.sin(0))*scale+ fm.getStringBounds(dec0P.format(s.getTime()), gTimes).getHeight()));
}
在我的getCanvas()方法中,还有一些来自画组件(图形g)的代码
//Draws SurfaceTimes
if(surfaceTimesOnOffButton.isSelected()) {
try {
getSurfaceTimes();
} catch (NegativeNumberException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(Pattern tempPat: world.getPatternList().values()){
for(SurfaceConnector sc: tempPat.getSurfaceList().values()){
// boolean isSelected = sc == selected || (selected instanceof Collection<?> && ((Collection<?>)selected).contains(sc));
if(sc.getTo() instanceof Dummy ){
renderer.paintSurfaceTimes(g2, sc, sc.getTo(), colourTimes, bounds, Zoom.getScalingFactor()* UnitConvert.metersToPixels(1), enhanceTie, enhance);
}
}
}
}
画布绘图代码和可打印代码之间的唯一区别是:下面的getCanvas()代码...
Visualise2D renderer = new Visualise2D();
@Override public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
LiteTiePrinter.class
public class LiteTiePrinter implements Printable {
public int print(Graphics g,PageFormat pf,int page)引发PrinterException{
// We have only one page, and 'page'
// is zero-based
if (page > 0) {
return NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D)g;
g2d.translate(pf.getImageableX(), pf.getImageableY());
// Now we perform our rendering
Visualise2D renderer = new Visualise2D();
感谢任何帮助,为什么字体输出不同。提前谢谢你。
大家好,阅读本文的人。我想我会分享我15个小时的互联网搜索和堆栈溢出,以找到我自己的问题的答案。我刚刚找到了一个,并测试了一个建议。它成功了。
我选择使用用户456837提供的答案。如果我有足够的分数,我会投票给这个用户。
答案是用drawGlyphVector()补充drawString()。成功了!
//GET THE FONTMETRICS
FontMetrics fm = h2.getFontMetrics();
//GET THE DIAMETER OF THE HOLE
double hEdge = (UnitConvert.pixelsToMeters(hole.getDiameter()));
// GET THE LOCATION OF THE HOLE
double x1 =((hole.getEasting() - bounds.getX()));
double y1 = (bounds.getHeight() + bounds.getY() - hole.getNorthing());
//SET THE COLOUR OF THE TEXT
h2.setColor(AMETHYST);
//SET THE FONT TO USE
h2.setFont(new Font("Monaco", Font.BOLD, 8));
//USING - DRAWGLYPHVECTOR() TO OVERCOME THE PRINTING ISSUE RELATED TO THE OSX PORT OF JAVA7 - MAY NOT NEED THIS WITH FUTURE UPDATES.
h2.drawGlyphVector(
h2.getFont().createGlyphVector(h2.getFontRenderContext(),
dec1P.format(hole.getHoleLength())),
(int)((x1+hEdge*Math.cos(300))*scale)- (fm.stringWidth(dec1P.format(hole.getHoleLength()))/2),
(int)((y1 + (hEdge *enhance*1.1)/2)*scale) +(fm.getHeight()/2) +pixelOffset
);
/*//USING - DRAWSTRING() DOESN'T WORK IN JAVA 7 ON MAC OSX
h2.drawString(
(dec1P.format(hole.getHoleLength())),
(int)((x1+hEdge*Math.cos(300))*scale)- (fm.stringWidth(dec1P.format(hole.getHoleLength()))/2),
(int)((y1 + (hEdge *enhance*1.1)/2)*scale) +(fm.getHeight()/2) +pixelOffset
);
*/
我希望这能帮助任何搜索相同问题的人。此外,我建议你阅读斯蒂芬·格雷尼尔关于这个问题的博客。它在一篇博客评论中提到,这在Java7u40中并不明显...所以也许我最好升级...?
请阅读下面的链接
osx上的打印问题
有没有一种方法我可以在Java中操纵一个PrinterJob而不是实际打印到打印机上,这样我就可以获得每一页的图形对象?我尝试将PrintService设置为null,但Java不允许这样做。 这样,我就可以检索文档的准确打印预览,而不必在不同的上下文中从头重新构建PrinterJobs函数。 下面是我的程序中打印函数的代码: 你已经可以看到图形对象被记录了,这样我就可以在另一个组件中绘制它们了,
你能直接在一台已连接到你的计算机上的打印机上打印一个MATLAB图形,或输出图形到一种MATLAB所支持的图象文件格式。这里提供两种打印或输出图形的方法。 在File菜单下用Print选项 用print命令 从菜单打印 在File菜单下方有四个菜单选择是关于打印的。 Page Setup选项显示一个对话框, 它使你能调整打印页图形的特征。 Print Setup选项显示一个对话框,它设置打印默认值
我试图覆盖Archaius为线程池提供的默认配置(如corepool大小、最大池大小、队列大小等)。但不知何故,它并没有起到作用。下面是我在application.yml文件中的配置。 Hystrix:命令:QueryTimeOutHandler:执行:隔离:线程:TimeOutInMilliseconds:600000线程池:QueryTimeOutHandler:CoreSize:200 Ma
我有一个bean,它使用@value注释填充属性,如下所示 在我的应用程序上下文中,我有以下配置 当values.properties文件不存在时,默认值“none”会按预期设置,但是当属性文件存在时,默认值仍会使用,即使我收到一条日志消息,说明属性文件是从PropertyPlaceholderConfigurer加载的 只有当属性文件丢失和/或占位符不可解析时,我才需要默认值生效;不是一直都是。
我创建了一个带有整数类型键的映射,值是字符串集。我已经用一些测试数据填充了映射,现在需要编写一个方法来打印映射的内容,例如“key: value, value, value” 我假设迭代映射,并将键分配给int变量并打印出来是如何开始的,但是我该如何打印字符串集中的值呢?