有几次我因为建议使用以下方法而受到批评:
在Swing组件上.当我想在显示的组件之间定义比例时,我没有看到任何替代它们的用法.我被告知这个:
对于布局,答案总是相同的:使用合适的LayoutManager
我在网上搜索了一下,但我没有找到任何关于这个主题的综合分析.所以我有以下问题:
我正在开发一个 Java 应用程序,除其他外,它应该在文本字段中显示 Magic: The Gathering 卡的详细信息(因为我使用的是 Swing,所以当前是一个JTextPane)。
这些细节包含文本和小图标,其中一些图标与文本内嵌(因此文本围绕它们流动),而根据我的设计,一些图标与同一行中的一些左对齐文本右对齐。
我从另一个应用程序中获取了一张图像,该应用程序的设计与我正在开发的应用程序非常相似(尽管不是使用 Java):
它基本上应该是这样的。
现在,出于对一切的热爱,我无法让它在JTextPane.
我开始尝试使用 CSS 来做到这一点,但发现JEditorPane和 子类不支持“float”属性,所以我尝试使用 PaneStyledDocument来代替。
我一开始没有让第一部分工作(顶部的图标和右对齐文本总是忽略它们的对齐方式,并直接放置在行中左对齐文本之后),直到我发现这个问题。
建议使用以下代码行:
pane.setEditorKit(new HTMLEditorKit());
Run Code Online (Sandbox Code Playgroud)
这确实解决了我的第一个问题。
但现在我陷入了第二部分,使第二部分中的这些图标与文本内联。这是我目前得到的:
我发现,出于某种原因,当您JTextPane使用带有上面代码行的编辑器套件切换到 html 模式时,插入组件会变得完全疯狂。
顶部的图标(实际上我已将其合并为单个图像)和下面文本中的图标(未合并)都位于 的内部JLabels,但如果我将它们添加为图像或添加到 的内部并不重要JLabels。图像或标签绝对不会比你在那里看到的大,我根本不知道额外的空白来自哪里。
我发现了这个问题,答案表明这是某种错误,或者只是 .html 模式的奇怪行为JEditorPane。
如果我再次删除上面的代码行,我最终会遇到原来的问题:
根据图标在文本中的具体位置,我会得到各种不同的奇怪结果。我在下面整理了更多示例图片:
那么,我该如何解决这个问题呢?除了这部分之外,这JTextPane对我来说工作得很好,但我可能会使用其他解决方案,只要最终结果看起来仍然相同。请记住,我可能想在其中添加一些其他组件(如 Button),因此如果可能的话,我想坚持使用 Swing 原生的组件。
用户将无法编辑 TextPane 的内容,但我想稍后添加一个选项,以便一键复制所有内容(所以我宁愿保留文本区域)。
下面,我整理了一个(不是那么简单的)工作示例供您使用:
(编辑:现在更新了底部的代码!旧代码仍然存在于以下链接下。)
我正在使用的图标如下。您需要重命名它们并更改代码中的路径。
需要注意的一些事项:
在 Sharcoux 的回答之后,我编辑了代码,在实际的 JTextPane 上方有 …