相关疑难解决方法(0)

我应该避免在Java Swing中使用set(Preferred | Maximum | Minimum)Size方法吗?

有几次我因为建议使用以下方法而受到批评:

  1. 有必要对setPreferredSize
  2. 了setMinimumSize
  3. setMaximumSize

Swing组件上.当我想在显示的组件之间定义比例时,我没有看到任何替代它们的用法.我被告知这个:

对于布局,答案总是相同的:使用合适的LayoutManager

我在网上搜索了一下,但我没有找到任何关于这个主题的综合分析.所以我有以下问题:

  1. 我应该完全避免使用这些方法吗?
  2. 已经定义了这些方法的原因.那我什么时候应该使用它们?在哪种情况下?出于什么目的?
  3. 使用这些方法的负面后果究竟是什么?(我只能考虑在具有不同屏幕分辨率的系统之间添加可移植性).
  4. 我认为任何LayoutManager都不能完全满足所有需要的布局需求.我是否真的需要为布局上的每个小变化实现一个新的LayoutManager?
  5. 如果4的答案是"是",那么这是否会导致LayoutManager类的扩散变得难以维护?
  6. 在我需要定义组件子级之间的比例的情况下(例如,child1应该使用10%的空间,child2 40%,child3 50%),是否可以在不实现自定义LayoutManager的情况下实现这一点?

java swing layout-manager

471
推荐指数
8
解决办法
5万
查看次数

在 JTextPane 中对齐和内联组件(或图标)

我正在开发一个 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 的内容,但我想稍后添加一个选项,以便一键复制所有内容(所以我宁愿保留文本区域)。

下面,我整理了一个(不是那么简单的)工作示例供您使用:

(编辑:现在更新了底部的代码!旧代码仍然存在于以下链接下。)

http://pastebin.com/RwAdPCzb

我正在使用的图标如下。您需要重命名它们并更改代码中的路径。

在此输入图像描述
在此输入图像描述
在此输入图像描述

需要注意的一些事项:

  • 一开始,我使用“Style”类设置文本样式,如 Oracle 网站上的“如何使用编辑器窗格和文本窗格”教程(TextSamplerDemo.java,供您参考)中所述。这样,我什至无法在顶部完成右对齐部分。奇怪的是,当我使用“SimpleAttributeSet”类进行样式设计时,即使使用完全相同的设置,它也能工作。
  • 我为文本和包含图标的标签尝试了不同的对齐选项。无论我使用什么选项,都没有明显的差异。

更新1:

在 Sharcoux 的回答之后,我编辑了代码,在实际的 JTextPane 上方有 …

java swing jtextpane

5
推荐指数
1
解决办法
2617
查看次数

标签 统计

java ×2

swing ×2

jtextpane ×1

layout-manager ×1