Java 显示大量JTextPane?

Java 显示大量JTextPane?,java,swing,jtable,jpanel,jtextpane,Java,Swing,Jtable,Jpanel,Jtextpane,我在确定显示一堆JTextPane的最佳设计实践时遇到了一些麻烦。假设我有1000个JTextPane,每个JTextPane都包含一条样式化的消息,我希望将它们一个一个地显示出来,就像聊天中收到的消息一样。把一个JTable放进去会更好吗?或者干脆把它们都放在一个JPanel/JScrollPane中?我希望能够删除和添加JTextPane,以及选择/聚焦特定的JTextPane。我已经创建了一个Alpha原型(甚至不考虑原型)解决方案,使用JTALE和创建自定义模型/渲染,它似乎只是过于复杂

我在确定显示一堆JTextPane的最佳设计实践时遇到了一些麻烦。假设我有1000个JTextPane,每个JTextPane都包含一条样式化的消息,我希望将它们一个一个地显示出来,就像聊天中收到的消息一样。把一个JTable放进去会更好吗?或者干脆把它们都放在一个JPanel/JScrollPane中?我希望能够删除和添加JTextPane,以及选择/聚焦特定的JTextPane。我已经创建了一个Alpha原型(甚至不考虑原型)解决方案,使用JTALE和创建自定义模型/渲染,它似乎只是过于复杂,我正在努力实现。
我想知道仅仅编写一个定制的JPanel有多容易接受?我还对最多容纳10000个JPanel的性能方面感兴趣?

为什么不拥有1个JTextPane和10000个不同的字符串,根据需要使用给定的字符串填充JTextPane?

为什么不拥有1个JTextPane和10000个不同的字符串,根据需要使用给定字符串填充JTextPane?

显示10k文本窗格对我来说毫无意义。您可能会耗尽资源。某些布局管理器甚至对可以添加的组件数量有限制。我认为flow布局有512个限制,因此您需要嵌套面板以实现所需的功能,这将增加复杂性

事实上,显示10公里的任何东西对我来说也没有多大意义。用户将如何滚动并找到他们要查找的内容

但是,如果您确实需要这样的东西,允许您动态地添加/删除项,那么我将研究JTable。它已经支持动态添加/删除。此外,您甚至可以使用JTable的过滤功能来提高应用程序的可用性


我不知道你为什么说你需要定制模型和渲染器。您可以在JTable中使用HTML来显示样式化的消息。

显示10k文本窗格对我来说毫无意义。您可能会耗尽资源。某些布局管理器甚至对可以添加的组件数量有限制。我认为flow布局有512个限制,因此您需要嵌套面板以实现所需的功能,这将增加复杂性

事实上,显示10公里的任何东西对我来说也没有多大意义。用户将如何滚动并找到他们要查找的内容

但是,如果您确实需要这样的东西,允许您动态地添加/删除项,那么我将研究JTable。它已经支持动态添加/删除。此外,您甚至可以使用JTable的过滤功能来提高应用程序的可用性

我不知道你为什么说你需要定制模型和渲染器。您可以在JTable中为您的样式化消息使用HTML

…样式化的消息,我希望将它们一个显示在另一个上面

在这种情况下,更好的方法是将JList与自定义单元渲染器一起使用

…样式化的消息,我希望将它们一个显示在另一个上面


在这种情况下,更好的方法是将JList与自定义单元渲染器一起使用。

下面是一个示例。我希望能够点击消息和“删除/隐藏”以及潜在的鼠标悬停效果。我支持glowcoder(1+)。您可以通过向单个JTextPane添加MouseListener和MouseMotionListener来获得效果。拥有许多jTextPane似乎是毫无意义的过度杀戮。@Random-这个例子很有意义。我会保留一个显示消息的内部状态,以及您在文本窗格中的位置。如果你可以直接使用JTextPane,或者如果你需要像@Eels建议的那样编写自己的侦听器(我想你必须自己编写)。我不太熟悉。是的,我四处搜索了一下,找到了一种看起来很有希望的方法。作为旁注,我制作了一个JList并添加了20k JTextPanes(上面的示例图像中有相同的文本),除了永远加载外,它显示得很好且平滑,但正如下面的camickr所述,我实际上不打算在聊天窗口中显示超过几百条消息,我可能会实现类似skype的功能“加载更多/上周”。我将看看使用单个JTextPane可以达到什么效果,如果需要,cringe会退回到某个容器中的许多JTextPane……下面是一个我想要的示例。我希望能够单击消息和“删除/隐藏”以及潜在的鼠标悬停效果。我在这(1+)方面与glowcoder合作。您可以通过将MouseListener和MouseMotionListener添加到单个JTextPane中来获得效果。拥有多个JTextPane似乎毫无意义。@Random-这个例子很有意义。我会保留消息显示的内部状态,以及您在文本窗格中的位置。如果您可以使用JTextPane,我现在还不熟悉直接,或者如果你需要像@Eels建议的那样编写自己的听众(我想你必须自己编写。)是的,我四处搜索了一下,找到了一种看起来很有希望的方法。作为旁注,我制作了一个JList并添加了20k JTextPanes(与上面示例图像中的文本相同)除了要花很长时间才能加载外,它显示得很好,很流畅,但正如下面camickr所说的,我实际上不打算在聊天窗口中显示超过几百条消息,我可能会实现skype的“加载更多/上周”之类的功能“。我会看看用一个JTextPane我能得到什么,如果需要,cringe会退回到某个容器中的多个JTextPane。。。