在Java桌面聊天应用程序中混合使用Swing和JavaFX

时间:2014-08-13 09:53:27

标签: java swing javafx layout-manager

我知道已经有一些问题,但我无法找到自己的方式!

我想用java实现桌面聊天应用程序,它能够发送文本,图像,视频等。 现在我在聊天对话窗口中使用swing组件。 我创建了一个JFrame并添加了JTabbedPane,以便为每个新会话添加标签。 为了创建每个标签,我的行为如下:

  • 创建JPanel(我将其添加到我的JTabbedPane标签中)

    newtab = new JPanel();
    newtab.setLayout(new BoxLayout(newtab, BoxLayout.PAGE_AXIS));
  • 创建JTextPane以显示聊天的部分内容(以便像对待应用程序一样的对话,如viber,......)

我希望能够关注样式:

  • diffrent alignment
  • 更改字体,颜色
  • 插入JComponent(以显示其他类型的消息)
  • 每个消息轮的限制(我不想要squre一个)
  • ...
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,但我不知道将JavaFXswing放在一起是否合适,甚至是否可能?! 哪个布局管理器更适合JPanelnewtab)让我的JTextPane滚动。

3 个答案:

答案 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开始,你可以两种方式:

  • 使用SwingNode
  • 在JavaFX中嵌入Swing组件
  • 使用JFXPanel
  • 在Swing中嵌入JavaFX组件

最近我们不得不做出同样的决定。我们有一个应用程序,并希望迁移到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

的开发