我知道已经有一些问题,但我无法找到自己的方式!
我想用java实现桌面聊天应用程序,它能够发送文本,图像,视频等。
现在我在聊天对话窗口中使用swing组件。
我创建了一个JFrame
并添加了JTabbedPane
,以便为每个新会话添加标签。
为了创建每个标签,我的行为如下:
创建JPanel
(我将其添加到我的JTabbedPane
标签中)
newtab = new JPanel(); newtab.setLayout(new BoxLayout(newtab, BoxLayout.PAGE_AXIS));
创建JTextPane
以显示聊天的部分内容(以便像对待应用程序一样的对话,如viber,......)
我希望能够关注样式:
context = new StyleContext(); kit = new HTMLEditorKit(); chatPane = new JTextPane(); chatPane.setEditable(false); chatPane.setContentType("text/html"); chatPane.setEditorKit(kit); chatPane.setText(""); doc = (HTMLDocument) chatPane.getStyledDocument(); CSS(); // it is for adding ccs style to stylesheet of document JScrollPane scroll = new JScrollPane(chatPane); newtab.add(scroll , BorderLayout.CENTER);
我的问题是为我的显示部分设置完美的存储,因为javax.swing.text.html.CSS提供HTML 3.2支持,因此支持的CSS属性是有限的!
在互联网上搜索时,我发现JavaFX
,但我不知道将JavaFX
和swing
放在一起是否合适,甚至是否可能?!
哪个布局管理器更适合JPanel
(newtab
)让我的JTextPane
滚动。
答案 0 :(得分:3)
可以混合使用JavaFX和Swing。但我没有经验。我刚刚为一个非常好的小项目做了一点FX-UI。特别是CSS-Feature很棒。
根据混音,我最近发现了一个不鼓励混合这两种技术的博客:http://dlemmermann.wordpress.com/2014/07/17/javafx-tip-9-do-not-mix-swing-javafx/
也许这会给你一些帮助。
答案 1 :(得分:3)
正如已经说过的那样,可以混合Swing和JavaFX,特别是从Java 8开始,你可以两种方式:
最近我们不得不做出同样的决定。我们有一个应用程序,并希望迁移到JavaFX以获得更现代的设计,并使用所有引入的语言功能,如PropertiesBindings等,JavaFX组件很好地支持它。
首先我们尝试在Swing中嵌入JavaFX。在JFXPanel的帮助下嵌入了所有新组件。它真的很容易,但我们不时会遇到一些渲染问题,这些问题越来越烦人。 “不幸的是”我们习惯了新的JavaFX API,这就是为什么我们重新设计我们的应用程序,使其成为一个带有Swing Parts的JavaFX应用程序,这在Java 8发布时是可能的,因为我们并没有浪费修复那种渲染问题的时间。重新设计实际上是一些工作,因为一些概念是不同的。受益于新的API引起了一些重构,我们并没有真正想做的事情。
但是再次混合Swing和JavaFX有点模糊,应用程序的外观和感觉并没有真正令人信服,所以我们最终删除了所有Swing Parts并用JavaFX Components替换它们。到目前为止,我们并没有为这一步感到后悔,但是我们预计会有更多的工作,尽管我们已经使用了像MVP这样的模式,其中只有视图必须被重构,因为演示者(大多数)没有UI的东西(其中)我们学到了很多关于MVP和设计应用程序的知识,这真是一个有趣的过程。
总之我可以建议您创建一个视图列表,并考虑所需的所有组件,并尝试在JavaFX中查找相应的组件。为最复杂的组件制作小例子,看看它们是否满足所有用例。如果是这种情况并且您仍然有足够的时间切换到JavaFX,我个人会选择纯JavaFX方法,因为我在混合JavaFX / Swing时所做的经验,特别是因为您的UI设计似乎处于早期状态。最后,只是您可以为项目提供的时间问题,以及您是否真的了解JavaFX的新概念和组件。
关于JavaFX CSS支持,您可以找到引用here。
答案 2 :(得分:2)
最近我被问到同样的问题。 大约一个月前,我和我的团队开始了新项目。我们使用Java 8.0 + JavaFX 2.2。 我在JavaFX中发现了什么问题?
java.awt.SystemTray
。此外,我在设计中发现了一个问题 例如,你想制作漂亮的列表,其中包含粘贴在左侧的标签和右侧的复选框。但是没有好办法,你必须计算细胞长度等。
但JavaFX为缩减GUI提供了很好的机会。您可以在jxml文件中包含您的设计。它非常方便,因为它更加独立于设计代码。
关于混音我认为如果平台允许,那么你必须使用提供平台的解决方案。
而且我认为使用JavaFX的决定是正确的,如果只是因为它是一种相对较新的技术,由甲骨文开发,很可能很快就会取代摇摆。
您可以关注JavaFX here
的开发