【问题标题】:Increase gap between icon and button java增加图标和按钮java之间的差距
【发布时间】:2017-11-26 07:17:55
【问题描述】:

我正在用 Java 编写一个程序,您必须在其中使用按钮选择一个类别。

我正在尝试在 JButton 中放置一个图标和文本,但我无法完全正确对齐。我想要按钮左侧和图标之间的左侧更宽的空间。

我读到你可以创建一个不可见的线边框来解决这个问题,但是我的 JButton 已经有一个边框。

choose_Animals = new JButton ("ANIMALS");
    choose_Animals.setIcon(categoriesIcon[0]);
    choose_Animals.setHorizontalAlignment(SwingConstants.LEFT);
    choose_Animals.setIconTextGap(20);
    choose_Animals.setOpaque(false);
    choose_Animals.setContentAreaFilled(false);
    choose_Animals.setForeground(Color.BLACK);
    choose_Animals.setBorder(border);
    choose_Animals.setFocusable(false);
    choose_Animals.setFont(p);
    choose_Animals.setBounds(90, 220,470, 85);
    choose_Animals.addActionListener(this);
    this.add(choose_Animals);

【问题讨论】:

  • 不要这样做:choose_Animals.setBounds(90, 220,470, 85);。不要使用 set bounds 或 null 布局,因为它们是新手代码的标志,因为这意味着您还不了解这将导致您的悲痛。学习使用,然后使用布局管理器。
  • 正如你所说,我还是个新手,还没有学会使用布局管理器。
  • 使用 bounds 就是让你的 gui 变得僵硬,让它在除你自己的系统之外的任何系统上都无法使用,并且很难更新或增强。如果你移动东西,那么你必须处理任何移动的所有副作用。研究上面的链接并使用布局。你不会后悔这样做的。还要记住嵌套 JPanel,每个 JPanel 都使用自己的布局。
  • 感谢您提供有关布局的信息,我仍在自行学习它们,这需要一些时间。您知道我要求的内容是否可以通过 null 布局实现?如果没有,您建议我从哪种布局开始?

标签: java swing jbutton


【解决方案1】:

您知道我要求的内容是否可以通过 null 布局实现?

定位按钮的文本/图标与布局管理器无关。这些是组件本身的属性。

是的,您应该使用布局管理器,而不是空布局。现在是学习使用布局管理器的时候,而不是将来的某个时间。

我读到你可以创建一个不可见的线边框来解决这个问题,

您可以使用 EmptyBorder 为 4 个插入位置之一提供额外空间。

但是我的 JButton 已经有边框了。

您可以使用CompoundBorder 将您当前的边框与EmptyBorder 组合起来

阅读 How to use Borders 上的 Swing 教程部分,了解更多信息和示例。

【讨论】:

  • 非常感谢,CompoundBorder 解决了我的问题。你知道有什么地方可以让我逐步学习使用布局吗?
  • @LuisdelaCal Official tutorial
  • @LuisdelaCal, Do you know of any place where I can learn to use layouts 叹息...我给了你一个链接到Swing Tutorial 中的一个部分(关于如何使用边框)希望你能看看目录其他基本的 Swing 信息。充分利用提供给您的资源。