我意识到大多数Java代码都会覆盖paint或paintComponent,它们中的大多数都没有恢复图形对象的旧状态,之后它们就改变了图形对象的状态.例如,setStroke,setRenderingHint ......
我想知道在从方法返回之前恢复图形对象的旧状态是否是一个好习惯.例如
public void paintComponent(Graphics g) {
super.paintComponet(g);
Stroke oldStroke = g.getStroke();
g.setStroke(newStroke);
// Do drawing operation.
g.setStroke(oldStroke);
}
Run Code Online (Sandbox Code Playgroud)
这是一个好习惯吗?还是结束了?
对于一个业余爱好项目,我将构建一个程序,当给定图像位图时,将创建一个十字绣图案作为PDF.我将在Mac上使用Cocoa/Objective C.
源位图通常是24bpp图像,但是在数百万种可用颜色中,只有少数存在作为十字绣线程.线程有各种类型.DMC是最广泛使用的,几乎整个范围都可以从各种网站获得RGB值.例如,这是一个.
DMC# Name R G B
----- ------------------ --- --- ---
blanc White 255 255 255
208 Lavender - vy dk 148 91 128
209 Lavender - dk 206 148 186
210 Lavender - md 236 207 225
211 Lavender - lt 243 218 228
...etc...
Run Code Online (Sandbox Code Playgroud)
正如我所看到的,我的第一个问题是从RGB的起点开始,从图像中的像素中选择DMC集中可用的最近颜色.在数学上找到最接近的DMC颜色的最佳方法是什么,并确保它也适合作为颜色?
虽然我将使用Cocoa,但您可以在发布的任何代码中使用伪代码(甚至是Java!).
我有一个包含小型HTML文档的数据库,我需要以编程方式将几个插入到带有iText的PDF文档或带有Aspose.Words的Word文档中.我需要保留HTML文档中的任何格式(在合理范围内,尊重<b>标签是必须的,像<span style ="blah">这样的CSS是一个很好的选择).
iText和Aspose都可以(粗略地)工作:
Document document = new Document( Size.A4, Aspect.PORTRAIT );
document.setFont( "Helvetica", 20, Font.BOLD );
document.insert( "some string" )
document.setBold( true );
document.insert( "A bold string" );
Run Code Online (Sandbox Code Playgroud)
因此(我认为)我需要某种HTML解析器,我可以检查字符串和样式以插入到我的文档中.
任何人都可以建议一个好的图书馆或明智的方法解决这个问题吗?平台是Java
我们的Swing应用程序的一些用户报告显示器上出现了奇怪的人工制品.这范围从组件没有正确地重新绘制一秒或两秒,直到应用程序的整个部分被重新绘制,如窗口区域上的平铺壁纸.
在五年左右的时间里,这个应用程序已经由经验丰富的Java人员和大学之外的所有级别的开发人员一起工作,正如您所期望的那样,一些AWT代码是彻头彻尾的混乱.我现在面临着在接下来的几个月左右努力纠正尽可能多的坏事的任务.
其中一些很容易处理.仅在事件调度线程上处理组件,异步处理IO,有点事情,我希望将消息传递给团队的其他成员.
我想知道的是处理Graphics上下文的最佳方法,特别是在paintComponent()上下文中.我看到很多......
public void paintComponent( Graphics g ) {
super.paintComponent( g );
Graphics2D gfx = (Graphics2D)g;
// ...Whole lotta drawing code...
}
Run Code Online (Sandbox Code Playgroud)
这样做更好吗?
public void paintComponent( Graphics g ) {
super.paintComponent( g );
Graphics2D gfx = (Graphics2D)g.create();
// ...Whole lotta drawing code...
gfx.dispose();
}
Run Code Online (Sandbox Code Playgroud)
如果g参数将在其他颜料中重复使用,那么我不需要将其恢复到良好状态,撤消AffineTransforms等?
在Windows上的Java控制面板中,有"临时Internet文件"的设置,其中缓存了所有applet和webstart内容.对于我们应用程序的某些用户,此缓存无法正常运行,他们需要在我们的webstart应用程序正确更新之前通过控制面板删除所有文件.
忽略这样做的其他含义,无论如何我们可以在我们进行更新时以编程方式删除临时文件缓存,最好是通过Java而不依赖于任何批处理文件或Windows hackery quackery?
我有一个在Tomcat 6中运行的Web应用程序,我已经设法将其配置为使用内置的DBCP连接池,并且一切都运行良好,但我怀疑它在数据库上运行在错误的隔离级别.我希望它以未提交的读取方式运行,但我认为它在read committed中运行,并且不知道如何设置它.
这是我的上下文的XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<Context antiResourceLocking="false" privileged="true">
<Resource
name="jdbc/Connection"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
driverClassName="net.sourceforge.jtds.jdbc.Driver"
url="jdbc:jtds:sqlserver://...etc..."
/>
</Context>
Run Code Online (Sandbox Code Playgroud)
这是用于获取数据库连接的Java方法.
public Connection getDatabaseConnection() throws ServletException {
try {
InitialContext cxt = new InitialContext();
if ( cxt == null ) {
throw new ServletException( "ServletContext unavailable." );
}
DataSource ds = (DataSource)cxt.lookup( "java:/comp/env/jdbc/Connection" );
if ( ds == null ) {
throw new ServletException( "Data source not found!" );
}
Connection conn = ds.getConnection();
return conn;
} etc...
Run Code Online (Sandbox Code Playgroud)
获得连接之后, …
对于从HTTP到SQL查询,L1 / L2内存缓存等各种各样的事情,这里有很多关于缓存无法正常工作或询问如何正确实现缓存的问题。
从计算机科学的角度来看,它通常被认为是一个难题吗?