在实现您自己的呈现时使用AWTFrame和SwingJFrame与不使用标准JavaGUI组件之间的主要区别是什么?这是上一个问题的后续:AWTcustomrendering-capturesmoothresizesandeliminateresizeflicker关于Swing与AWT的典型谈话要点似乎并不适用,因为我们只使用框架。例如,重量级vs轻量级已经过时了(JFrame扩展了Frame)。那么对于这种情况,JFrame还是Frame哪个最好?它有什么有意义的不同吗?注意:在这种情况下,不希望在EDT中呈现。有一个未链接到EDT的应用程序工作流,渲染是在EDT之外按需完成的。将
我创建了一个对话框,用户可以在其中浏览图像,然后查看在Canvas上绘制的图像的预览。图像被缩放,以便在适合盒子时保持其纵横比。我使用了在thisanswer中找到的调整大小的方法,这涉及将图像从SWT转换为AWT,执行调整大小,从AWT转换回SWT,最后将其绘制在Canvas上。由于此过程在时间和处理能力方面的成本非常高,我选择如果图像大小正确则跳过调整大小的步骤,因此不需要以任何方式进行转换。处理具有alpha透明度的图像时会出现此问题。在某些情况下,首先转换的具有透明度的图像会以黑色背景绘制在Canvas上。同一图像的副本已调整为Canvas的精确大小,因此未转换,具有白色背景。
我正在尝试编写一个SWT组件,它能够获取并绘制java.awt.BufferedImage的实例.我的问题是SWT的Image和AWT的BufferedImage不兼容:SWT组件无法绘制java.awt.Image,AWT/Swing组件无法绘制org.eclipse.swt.graphics.Image.有几种尝试以其他方式解决这个问题的方法(也可能有一些变化,但基本上有这两种):ConvertbetweenSWTImageandAWTBufferedImageSwing/SWTIntegration他们都有缺点,没有达到我的预期:第一种方法,转换SWTImage到Buffered
最简单地说,我试图使用组件的宽度来设置其父容器的大小。但是,为组件返回的宽度偏移了大约4个像素。更多详情:我有一个对话框,其中的子面板在中间水平分布。对话框应始终与此子面板列表一样宽,并在列表太长时使用滚动条。我只是尝试使用1个子面板来开始。无论我做什么,返回的子面板的大小总是错误大约4个像素。我可以看到子面板右侧有一个非常烦人的4像素间隙,使我的对话框看起来很可怕。随着更多子面板的添加,效果显然会更加复杂。我尝试使用什么来获取宽度:sup-panel.getSize().width;sub-panel.getBounds().width;sub-panel.getWidth();su
几个月来我一直在研究这个,这是迄今为止我想到的最好的。结构(在EDT之外呈现)无可争议,因为我们的应用程序以这种方式运行并且不会被重写。该应用程序具有集成的布局模型和脚本模型并驱动渲染,因此渲染必须在AWT绘制模型之外执行。我试图达到的是执行自定义渲染的最佳且可靠的方式。以下SSCCE对我们来说效果很好。但是,在调整帧大小时,它有两个缺点:偶尔会出现闪烁,尤其是在快速调整大小时从paint()调用调用调整大小(通过此处的checkSize)的“平滑调整大小”技巧仅适用于扩展。缩小帧时,它通常在释放鼠标按钮之前不会呈现此外,但在这里不是很明显,它确实会偶尔抛出IllegalStateEx
如果您正在修改GUI并且处于AWT事件调度线程中,例如ActionListener,您是否应该使用SwingUtilities.invokeLater(Runnable)? 最佳答案 您必须始终在事件调度线程(EDT)中进行GUI更新。然而,正如Jeffrey在评论中指出的那样,Swing对象上的ActionListener.actionPerformed方法已经从EDT调用。如果您只是想让JButton看起来启用/未启用或从JList添加/删除项目,并且您通过ActionListener在Swing组件上,那么您不必显式调用Swi
因此,我正在创建一个侧边滚动条,并尝试在另一张图片的点上绘制一张图片。我有5000x500的背景图片,假设我想在500、50的背景图片处绘制一张25x25的图片。我该怎么做?到目前为止我已经尝试过:Coinsc=newCoins(img.getWidth(this)-4500,img.getHeight(this)-250);但这只是在帧的500、50处绘制它,因此当我向右滚动时它会在图像上“移动”。我希望在向右滚动一次后,硬币图像在图像的500,50处绘制,仍然是帧的495,50。我也可以使用背景图像的getGraphics并将较小的图像绘制到它上面,但我认为因为我在创建对象期间设置
在JPanel的子类中,我这样做:publicvoidpaintComponent(Graphicsg){super.paintComponent(g);Graphics2Dg2d=(Graphics2D)g;g2d.rotate(Math.toRadians(90.));g2d.drawString(aString,40,-40);}字母旋转正确,但第二个字母不在第一个字母下方的预期位置(在其右侧,在旋转的空间中),而是在其上方(左侧),第三个字母在上方(到左侧)第二个等。将旋转角度更改为45度会导致每个字符顺时针旋转45度,正如预期的那样,但字符行会逆时针旋转45度,这与两个旋转都
我创建了一个自定义形状,本质上它是四个Arc2D对象的集合。绘制这些弧线时,它们形成了一个四点圆角星形,有点像三叶草。一个弧线结束的地方,另一个弧线开始。它们在中心形成一个正方形。想象一下,取一个正方形并在每一边画半个圆。我可以将这个形状绘制到Graphics2D对象,但是当我填充它时,它只会填充圆弧而不是中心正方形。填充这个内部方block是我的问题。我已经实现了下面的getPathIterator()方法。我也实现了contains()方法。但它仍然只会填充弧线。我尝试添加一个Rectangle。填充形状时,矩形/正方形会被正确填充,但是它也会绘制矩形,这显然应该是预期的,但绝对不
我为虚拟键盘实现了一个示例类并运行了这个VirtualKeyboardTest。出现了键盘,但主要问题是单击x按钮时它没有正确关闭。我该如何纠正这个问题?importjava.awt.*;importjava.awt.event.*;publicclassVirtualKeyboardTest{publicstaticvoidmain(Stringargs[]){VirtualKeyboardvk=newVirtualKeyboard();vk.setSize(500,300);vk.setVisible(true);Framef1=newFrame();f1.addWindowLis