草庐IT

java - AWT 快速图形和线程安全

我正在将一个非常古老的AWT游戏移植到一个非常糟糕的新设备上。这款游戏有一大堆问题,包括对线程安全的一种非常松懈的方法:游戏引擎试图使用从UI线程获得的图形上下文在其引擎线程中直接绘制到屏幕上。这在设备上不起作用。我设法让它开始工作,方法是让引擎线程绘制到屏幕外缓冲区,然后让UI线程定期调用显示组件上的repaint(),然后显示组件将缓冲区blit到屏幕上,但性能很糟糕——考虑到所有上下文切换和双缓冲,这不足为奇。我实际上并不是一个知识渊博的AWT程序员;到目前为止我一直避免它,这已经够可恨了。但是这个问题——有一个引擎线程想要在屏幕上绘制——一定是一个常见的问题。有谁知道任何体面的

java - 消除初始按键延迟

当您在文本框中键入内容并按住某个键时,您会得到(a.......aaaaaaaaaaaaaaaa),具体取决于初始按键延迟。addKeyListener(newKeyAdapter(){publicvoidkeyPressed(KeyEvente){//Handlekeypresshere}我正在创建一款游戏,其中用户的react非常重要。我怎样才能完全消除这种延迟?上面的代码不起作用。我也曾尝试重写processKeyEvent,但没有成功。 最佳答案 这些事件是由JVM/操作系统生成的,除非您指示用户更改按键延迟/按键重复设置,

Java 打印 - 在少数打印机上放大打印输出

在某些打印机上,无论出于何种原因,当通过JavaJVM(Java7)打印时,打印输出会自动放大,似乎是默认设置。这似乎与旧打印机有关,而且非常罕见,但不止一种打印机型号会发生这种情况。升级驱动程序也不能解决问题。该软件使用JFreeReport(经典引擎)库,使用该库导出为PDF时,一切都很棒。使用库的打印预览也很完美。然而,当涉及到打印时,而且这只是极少数打印机的情况,打印输出会被放大。它们没有放大,但字体要大得多且间距不当,因此它们彼此重叠。这些带有JDK6的相同打印机似乎工作正常。看来,我仍在尝试隔离问题。我的想法是这些打印机可能无法正确支持Java7更新:我找到了thisthr

java - 如何有效地实现 java.awt.Composite?

背景:我需要能够创建“残疾”外观的图像。通常建议的方法是将图像转换为灰度并显示灰度图像。缺点是它仅适用于图像,因此在无法立即访问处于禁用状态的图像的情况下显示图形会很麻烦。现在我认为这可以通过java.awt.Composite即时完成(然后我就不需要知道例如如何实现Icon以使其禁用)。只是似乎没有转换为灰度的实现,所以我不得不创建自己的...就是说,我拼凑了一个实现(它呈现了我期望的效果)。但我不确定它是否真的适用于所有情况(Composite/CompositeContext的Javadocs对于如此复杂的操作来说似乎非常薄)。正如您从我的实现中看到的那样,我采用了一种迂回的方式

java - 为什么 java.awt.Dimension 有公共(public)变量?

public变量的类在封装中被认为是弱的,这不是一个糟糕的设计实践吗?如果是这样,为什么java.awt.Dimension有2个公共(public)变量width和height? 最佳答案 我认为公开公共(public)字段并不违反封装本身。封装是实体的属性,实体内部隐藏着复杂的内部结构。这个复杂的结构不能直接访问,因此没有被破坏的风险。它只能通过公共(public)方法访问,这使得它们可以很好地工作并且不会破坏复杂的内部结构。例如,我们无法直接访问HashMap的哈希表,也无法破坏它。我们只使用get和put方法来正确处理哈希表

java - 使用 GraphicsEnvironment 注销字体?

我最近发现如何使用本地GraphicsEnvironment注册TTF字体,s.t.,对于我的用例(SVG到PNG转码),ApacheBatik可能会识别字体:importjava.awt.Font;importjava.awt.FontFormatException;importjava.awt.GraphicsEnvironment;//[...]GraphicsEnvironmentlge=GraphicsEnvironment.getLocalGraphicsEnvironment();try{Fontfont=Font.createFont(Font.TRUETYPE_FON

java - 在 java 中将 java.awt.Image 保存到磁盘

我已经从oracle过程中读取了clob,并通过以下代码将它们转换为java.awt.Image对象。InputStreamstream=clob.getAsciiStream();ByteArrayOutputStreamoutput=newByteArrayOutputStream();inta1=stream.read();while(a1>=0){output.write((char)a1);a1=stream.read();}ImagemyImage=Toolkit.getDefaultToolkit().createImage(output.toByteArray());o

java - awt双缓冲

awt是否可以实现双缓冲(在java中)?目前,我知道swing不应该与awt一起使用,所以我不能使用BufferStrategy和诸如此类的东西(我已经有一些用awt编写的代码,我不想在swing中重写)。如果awt可以实现双缓冲,我是否必须手动编写缓冲区?与swing不同,awt似乎没有相同的内置双缓冲功能。如果我必须手写代码,是否有好的教程可供引用?还是对于新手程序员来说,改用swing更容易/更明智?很抱歉这个多步骤问题。感谢您的宝贵时间:) 最佳答案 这很容易在网络上得到解答。只需搜索“doublebufferawt”,您

java - 在我的程序中为我的非图形相关类使用 swing 和 awt 类是不好的做法吗?

那么,假设我有一些游戏,例如Pong。显然,一般来说,您不想将游戏逻辑混合到图形类中,因此Ball或Paddle类与实际绘制它们的JPanel是分开的。Ball具有球的移动逻辑、当前位置、命中检测等。但是,在我的Ball类中使用Swing和awt中的图形类对我来说是不好的做法吗?例如,如果我要使用java.awt.Rectangle来确定碰撞框。尽管我没有在这个类上画它,但我正在使用它。或者如果我要使用Java.awt.Point来存储坐标。顺便说一句,我问的原因是因为我在这个网站上被多次告知不要将图形与其他部分混在一起。在非图形类中使用Rectangle:(这是不好的做法吗?)pub

java - JFrame 重绘 () 问题 - Java

我希望能够在JFrame上使用Java的paint()进行绘图。当我单击JFrame(目前在任何地方)时,我希望使用单击的坐标重新绘制JFrame-类似于此Java小程序http://www.realapplets.com/tutorial/MouseClickExample.html目前工作:一开始就绘制了所有内容并正确显示了JFrame不工作:即使声明了repaint(),JFrame也不会重绘和更新这是我的代码-请尽可能严格-我想改进我的Java编程技术,所以(如果你有时间)指出我可以改进的每个方面。非常感谢任何帮助。importjava.awt.*;importjava.awt