java有很多gui框架,但是什么被认为是今天的选择框架?
以下是我对不同框架的理解,如果我错了请纠正我.这是一个非常松散定义的问题集,但我仍然认为它对于任何想创建丰富的gui应用程序的人都很有价值.
是摆动的基础,它表现良好,但缺乏先进的部件.如果您打算创建丰富的应用程序,AWT可能不是可行的方法.但是对于不需要丰富用户界面的小型gui应用程序.这可能非常适合,因为它是一个久经考验的框架.
基于AWT,如前所述.在它的初期,它被认为是缓慢和错误,并导致IBM为Eclipse创建SWT.但是,使用Java 5(或6?),Swing成为构建新应用程序的首选框架.Swing有很多丰富的组件,但在某些方面仍然缺乏.一个例子是没有可以进行排序和过滤/搜索的全功能TreeTable组件.
由IBM为Eclipse创建,他们似乎认为Swing当时不适合Eclipse.它本身是相当低级的,它通过JNI使用平台的本机小部件.它根本与Swing和AWT无关.然而,他们的API有点笨重而且不直观.它们确实有一些像TreeTable这样的高级组件.(但我不认为他们支持排序和过滤开箱即用).SWT使用一些本机绑定(通过JNI?),互联网上的咆哮是这个框架不应该在今天的项目中使用.(为什么不?)
基于Swing,它的使命是为挥杆创造丰富的组件.仍在开发中.(虽然不是很活跃.)有一组非常好的组件,比如TreeTable.但据我所知,TreeTable不支持过滤和排序.但它确实支持突出显示搜索.
请注意,SwingX是组件(AFAIU),它们是现有Swing组件的扩展或组合
JGoodies数据
我一无所知的框架......它的优点和缺点是什么?Jgoodies与其他人的区别是什么?
JGoodies OTOH是关于PLAF和布局的.
Java/Oracle的最新旗舰产品.承诺成为开发富桌面或Web应用程序的事实标准.
它使用Java2D呈现UI,从而最小化Swing和AWT的(IMO,膨胀)遗产的影响.(@Augustus Thoo)
它的主要焦点似乎是RIA(富互联网应用程序),但似乎它也可以应用于桌面应用程序.而作为个人评论,看起来很有趣!我特别喜欢它是一个apache项目.
https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html
本机qt库的java包装器,用c/c ++编写.非常强大,广泛使用和接受.有很多GUI组件和易于使用的API.
所以,试着总结一下我要问的一点:
说我想用Java创建一个桌面应用程序,它涉及许多高级组件,我应该选择什么?为什么?
哪些框架应被视为已弃用,哪些框架应被视为遥远未来的框架?
什么是今天的事实标准框架,您使用哪些工具来创建Java gui应用程序?
我可能会后悔问这个,但不管怎么说都不好意思:
据说C#/ .Net有一套易于使用的组件,可以在各个方向上进行弯曲.在调查了不同的java框架之后,我似乎无法对Java说同样的话.为什么是这样?为什么java(世界上使用最广泛的编程语言)没有相同的GUI组件集?
难道只是java已经将gui组件基于更低的级别,并且可以编写我正在寻找的所有这些高级组件,但是如果不是所有的工作,你必须做很多事情吗?
我是白天的Web开发人员,正在考虑构建我的第一个真正的桌面应用程序.我们的想法是构建一个工具,在没有API可用的Web应用程序中自动执行非常重复的任务.
我知道我想使用Java.我之前使用它来获取Web内容,非常了解语法并希望应用程序尽可能简单地交叉平台.
我不太确定我应该使用SWT还是Swing.由于我的主要受众使用Windows,我希望尽可能将其视为本机.Linux和Mac应该可以工作,但外观在这里并不那么重要.
那么支持和反对每个UI框架,Swing或SWT的论据是什么?
谢谢.
PS:我使用Eclipse在Windows上开发.但是考虑和Netbeans一起玩.
我买了第三方Java库,其中包含一个JAR文件和两个DLL文件.我编写了自己的Java程序来调用第三方JAR文件.现在我的问题是如何将我的所有代码打包成一个包含我所有代码和第三方JAR和DLL的JAR文件?
我知道SWT就是这种情况.在swt.jar包括DLL文件,但我不知道如何做到这一点,以及如何使其正常工作.
这很简单,我来自swing/awt背景.
我只是想知道为SWT小部件设置背景颜色的正确方法是什么?
我一直在努力:
widget.setBackground( );
Run Code Online (Sandbox Code Playgroud)
除了我不知道如何在SWT中创建颜色对象?
我使用Swing和MigLayout构建了一个GUI.
我在Windows 7旗舰版上使用Eclipse 4.2.2(64位).每次我点击返回窗口编辑我的代码时,会弹出一个弹出窗口,然后提示我重启Eclipse,事件日志说明如下:
org.eclipse.swt.SWTError: No more handles
at org.eclipse.swt.SWT.error(SWT.java:4387)
at org.eclipse.swt.SWT.error(SWT.java:4276)
at org.eclipse.swt.SWT.error(SWT.java:4247)
at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
at org.eclipse.swt.widgets.Control.createHandle(Control.java:704)
at org.eclipse.swt.widgets.Label.createHandle(Label.java:199)
at org.eclipse.swt.widgets.Control.createWidget(Control.java:744)
at org.eclipse.swt.widgets.Control.<init>(Control.java:112)
at org.eclipse.swt.widgets.Label.<init>(Label.java:101)
...
Run Code Online (Sandbox Code Playgroud)
我正在附上错误消息的屏幕截图.还有其他人遇到过Eclipse的这个错误吗?你知道解决方法还是解决方法?



我的应用程序抛出以下异常.
线程"main"中的异常java.lang.UnsatisfiedLinkError:无法在64位JVM上加载32位SW T库.
怎么解决这个?需要什么名称的jar文件?
我正在使用Eclipse SWT库为桌面编写用于桌面的Java应用程序.我认为SWT帮助Java克服了桌面接受的最大障碍:即为Java应用程序提供一致的响应式界面,该界面看起来像是桌面上任何其他应用程序的界面.但是,我觉得打包应用程序仍然是一个问题.
OS X本身提供了一种简单的机制,可以将Java应用程序包装在本机应用程序包中,但是为Windows/Linux生成一个不需要用户运行丑陋的批处理文件或点击.jar的应用程序仍然很麻烦.可能这不是Linux上的问题,用户可能会更精通技术,但在Windows上我希望有一个常规的.exe供他/她运行.
有没有人有任何针对Java的.exe生成工具的经验?我尝试过JSmooth,但遇到了各种各样的问题.在我破解Visual Studio并推出自己的解决方案之前,是否有更好的解决方案?
编辑: 我或许应该提一下,我无法在商业解决方案上花费很多钱.
当Java VM与EXCEPTION_ACCESS_VIOLATION崩溃并生成hs_err_pidXXX.log文件时,这表示什么?错误本身基本上是一个空指针异常.它总是由JVM中的错误引起,还是有其他原因,如硬件故障或软件冲突?
编辑:有一个本机组件,这是win32上的SWT应用程序.
我用SWT编写了一个Java GUI.我使用ANT脚本打包应用程序(下面的片段).
<jar destfile="./build/jars/swtgui.jar" filesetmanifest="mergewithoutmain">
<manifest>
<attribute name="Main-Class" value="org.swtgui.MainGui" />
<attribute name="Class-Path" value="." />
</manifest>
<fileset dir="./build/classes" includes="**/*.class" />
<zipfileset excludes="META-INF/*.SF" src="lib/org.eclipse.swt.win32.win32.x86_3.5.2.v3557f.jar" />
</jar>
Run Code Online (Sandbox Code Playgroud)
这会生成一个jar,在Windows上我只需双击即可运行我的GUI.缺点是我必须将Windows SWT包显式打包到我的jar中.
我希望能够在其他平台(主要是Linux和OS X)上运行我的应用程序.最简单的方法是创建特定于平台的jar,将适当的SWT文件打包到单独的JAR中.
有一个更好的方法吗?是否可以创建一个可在多个平台上运行的JAR?
SWT中是否有一种方法可以简单地获得等宽字体,适用于各种操作系统?
例如.这适用于Linux,但不适用于Windows:
Font mono = new Font(parent.getDisplay(), "Mono", 10, SWT.NONE);
或者我需要一个尝试加载不同字体(Consolas,Terminal,Monaco,Mono)的方法,直到一个不为空?或者,我可以在启动时在属性文件中指定它.
我尝试从Display获取系统字体,但这不是等宽的.