【问题标题】:How can i add JLabel and JTextArea in the same space in JAVA如何在 JAVA 的同一空间中添加 JLabel 和 JTextArea
【发布时间】:2015-02-04 23:03:27
【问题描述】:

这是我想要制作的 UI。

我是 UI 设计新手。谁能告诉我应该使用哪种布局?如何让 JLabel 和 JTextArea 粘在一起并使 JTextArea 中的 String 可点击?有没有更好的方法来实现这个设计。 我已经尝试过 BorderLayout,但似乎我无法将 JLabel 和 JTextArea 一起添加到同一个位置。

非常感谢。

【问题讨论】:

  • 我们可以看看你的代码吗?我不确定你在说图片的哪一部分。你是说最上面的吗?
  • “谁能告诉我应该使用哪种布局?” GUI 很少只使用一个布局。通常我们“分而治之”一个 GUI——对每个部分使用最适合它的任何布局。话虽如此,我可能会为那个 GUI 使用一个 GridBagLayout
  • 我看到GridBagLayout 最多,但我想你真正想知道的是,如何使用TitledBorder,更多细节参见How to Use Borders
  • 我在这里看到不止一个问题。

标签: java swing jpanel layout-manager jtextarea


【解决方案1】:

通常,复杂的 UI 将由一系列复合组件和布局组成,每个组件和布局都专注于特定的责任领域。这让生活变得更加轻松,因为您可以专注于一个小区域,而不必担心它会如何影响不相关的元素。

话虽如此,我想你真正想要的是TitledBorder,例如...

JTextArea ta = new JTextArea(20, 20);
JScrollPane sp = new JScrollPane(ta);
JPanel wrapper = new JPanel(new BorderLayout());
wrapper.setBorder(new TitledBorder("Details"));
wrapper.add(sp);

这将大大简化您的布局,因为您只需要布局wrapper 面板而不是标签和相关组件。

这里的缺点是您确实失去了JLabel 可以提供的键盘快捷键功能,但是您可以使用相同的想法(包装组件)将JLabel 和相关组件包装到一个易于使用的包中。

根据您选择的路线,我会看到 GridBagLayout 和可能的 BorderLayoutFlowLayout 发挥作用。

请参阅Laying Out Components Within a ContainerHow to Use Borders 了解更多详情

JTextArea 中的字符串可点击

这充其量是相当复杂的。如果您的意思是像超链接,那么我建议您对JEditorPane 进行一些研究,它会使其(有点)更容易

类似this for example

【讨论】:

  • 非常感谢您的评论。在我的示例中,类边框下有 5 个类名,如果我单击一个类名,它如何在属性边框中显示属性的名称?假设属性名称已经在 String[] 中。
  • 对于每个 textArea,我必须创建一个带有 TitledBorder 的特定 JPanel 来包含它?
  • 它会提供最好的外观,否则你会修改滚动窗格的边框,这可能看起来很奇怪
  • 看来我应该使用JList而不是JTextArea,所以我必须先设置面板大小并动态添加JList?
猜你喜欢
  • 2014-04-09
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 1970-01-01
  • 2010-10-10
  • 2013-05-24
相关资源
最近更新 更多