我创建了一个对话框,用户可以在其中浏览图像,然后查看在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
几个月来我一直在研究这个,这是迄今为止我想到的最好的。结构(在EDT之外呈现)无可争议,因为我们的应用程序以这种方式运行并且不会被重写。该应用程序具有集成的布局模型和脚本模型并驱动渲染,因此渲染必须在AWT绘制模型之外执行。我试图达到的是执行自定义渲染的最佳且可靠的方式。以下SSCCE对我们来说效果很好。但是,在调整帧大小时,它有两个缺点:偶尔会出现闪烁,尤其是在快速调整大小时从paint()调用调用调整大小(通过此处的checkSize)的“平滑调整大小”技巧仅适用于扩展。缩小帧时,它通常在释放鼠标按钮之前不会呈现此外,但在这里不是很明显,它确实会偶尔抛出IllegalStateEx
如果您正在修改GUI并且处于AWT事件调度线程中,例如ActionListener,您是否应该使用SwingUtilities.invokeLater(Runnable)? 最佳答案 您必须始终在事件调度线程(EDT)中进行GUI更新。然而,正如Jeffrey在评论中指出的那样,Swing对象上的ActionListener.actionPerformed方法已经从EDT调用。如果您只是想让JButton看起来启用/未启用或从JList添加/删除项目,并且您通过ActionListener在Swing组件上,那么您不必显式调用Swi
您可能知道,标准的SWT主循环如下所示:Displaydisplay=newDisplay();Shellshell=newShell(display);...shell.open();while(!shell.isDisposed()){if(!display.readAndDispatch()){display.sleep();}}display.dispose();最近,我与一位同事争论将主循环包装在try-catch中是否有意义,如下所示:Displaydisplay=newDisplay();Shellshell=newShell(display);...shell.open
有没有办法改变在行布局中创建的元素的顺序,我想在第一个显示的元素中显示它。例如,如果我创建element1,然后创建element2element3、element4我希望将布局视为元素4元素3元素2元素1这意味着最后创建的元素将是第一个显示在shell中的元素。有没有简单的方法来处理行布局并做到这一点。我想把下面的例子改成显示Button99Button98Button97Button96Button95Button94……………………………….importorg.eclipse.swt.SWT;importorg.eclipse.swt.layout.RowLayout;impor
table.addSelectionListener(newSelectionAdapter(){publicvoidwidgetSelected(SelectionEvente){if(table.getSelectionIndex()!=-1){System.out.println(table.getSelectionIndex());TableItemitem=table.getItem(table.getSelectionIndex());System.out.println(item.toString());}else{}}});当我点击表格中的任何单元格时,只有该行的第一个
我为虚拟键盘实现了一个示例类并运行了这个VirtualKeyboardTest。出现了键盘,但主要问题是单击x按钮时它没有正确关闭。我该如何纠正这个问题?importjava.awt.*;importjava.awt.event.*;publicclassVirtualKeyboardTest{publicstaticvoidmain(Stringargs[]){VirtualKeyboardvk=newVirtualKeyboard();vk.setSize(500,300);vk.setVisible(true);Framef1=newFrame();f1.addWindowLis
我正在尝试在已就位图像的顶部绘制一个组合形状的透明mask。我已经通过本文中包含的对话代码提供了我正在尝试的技术示例。这是它生成的屏幕截图。示例1(左上)突出显示了我要解决的问题,我希望有2个圆圈或任何相交的形状/弧线,都以相同的alpha级别绘制在一起,即没有由绘制引起的复合不透明彼此的顶部。示例3(左下角)是我尝试通过创建一个带有实体形状的单独图像,然后使整个图像透明来解决这个问题的尝试,我认为使用这种技术会产生一个处理白色的图像作为透明色,因此圆的边缘与白色混合,这样当您在其上绘制时,会在形状周围产生“光晕”效果。示例2(左上角)通过将图像中的圆圈也绘制为透明来进一步突出显示此问
我们正在考虑将我们的Swing应用程序移植到SWT/JFace以获得更原生的外观、更快的UI渲染速度和更少的错误。有没有人已经做过这样的移植并想分享一些信息,尤其是我们应该预料到的缺点?提前致谢。PS:也许这更应该是一个wiki,因为接受一个作为最终答案是没有意义的。 最佳答案 根据我的经验:SWT并非适用于所有平台。确保您的所有目标平台都受支持。在SWT中修复错误比在Swing中更难:SWT中的大多数类都是最终类或在构造函数中包含恶意检查以确保没有人扩展它们,包已签名(因此您不能简单地替换类),到目前为止,我尝试了几次从源代码编译