【问题标题】:What is the best way to put spaces between objects? Can a Swing JSeparator object be an invisible separator?在对象之间放置空间的最佳方法是什么? Swing JSeparator 对象可以是不可见的分隔符吗?
【发布时间】:2010-06-04 15:20:56
【问题描述】:

我正在尝试使用 Swing 小部件在面板中放置两个按钮。在 NetBeans IDE 中,我的 JSeparator border 属性在属性窗格中设置为 (No border)

不过还是出现了一条线。这不是我对分隔符对象的期望。难道我做错了什么?来自 Delphi 和 C# WinForms 的背景,我希望在 Swing 中找到一些奇怪的东西。但是,您如何在面板中的两个按钮之间创建一个特定大小的透明间隙?我是否必须使用布局并避免JSeparator

更新:使用布局和没有任何分隔符对象应该是微不足道的。那么你是怎么做到的呢?我正在研究 NetBeans 布局定制器和属性检查器,但没有办法做到这一点。 (答案:使用插入而不是分隔符的布局。)

【问题讨论】:

  • “(无边框)”是 null 还是表示空边框的对象? null 是 UI 默认边框
  • 顺便说一句,如果您真的想这样做,您需要覆盖 JSeparator 的外观代码以不绘制任何内容。线条不是边界。
  • JSeperator 被发明来创建可见的分隔符。您不需要分隔符,您需要分隔符,这可以通过以下多种方法之一来实现。

标签: java swing netbeans insets jseparator


【解决方案1】:

您应该看看Box 类的静态实用程序方法。它们可用于制造充当隐形分隔件的固定支柱;例如

JPanel pnl = new JPanel(new FlowLayout());
pnl.add(new JButton("Hello"));
pnl.add(Box.createHorizontalStrut(10)); // Fixed width invisible separator.
pnl.add(new JButton("Goodbye");

与使用适当的最小、最大和首选尺寸自己创建/配置 JPanel 相比,这会生成更紧凑的代码。

【讨论】:

  • 我认为从长远来看,作为标准做法,这段代码和 JPanel 都可能比适当使用布局更痛苦。
  • @Warren P:根据您使用的布局管理器,此代码可能适合使用布局。不同的布局管理器有非常不同的方法来实现相同的结果。
  • “适当使用布局”在我的例子中是指“使用 netbeans 布局管理器而不是生成我自己的代码,而我仍在学习 netbeans、swing 和更新我陈旧的 Java 语言知识”。 ;-)
  • 没有什么可以说使用水平支柱不是对布局的适当使用;我通常使用这种方法来分隔 JToolBar 上的按钮。例如,在文字处理应用程序中,通常会添加一个小支柱来分隔按钮类别。
  • 如果你问我这是最好的答案
【解决方案2】:

JSeparator 是组件之间的可见分隔符。

来自javadoc for JSeparator

JSeparator 提供了一个通用组件来实现分隔线 - 最常用作菜单项之间的分隔线,将它们分成逻辑分组。

如果您想在两个不可见的组件之间放置一个组件,只需使用 JPanel 代替。然后用setPreferedSize()setMin/MaxSize()设置面板的大小。

【讨论】:

  • 在除 java 之外的大多数环境中,都会考虑使该行消失的选项。奇怪的是这些家伙没有考虑到。
  • 相反,空的Box 项目和Insets 就是为此目的而创建的。考虑过,只是不使用JSeparator
  • 啊,是的。插图非常适合我的使用,而 box 和 createHorizo​​ntalStrut 可能对于任何其他应用程序都足够了。现在我开悟了。谢谢。
【解决方案3】:

您不需要 JSeparator。大多数布局允许您设置组件之间的间隙(空间)。 Box 类可能特别有用。

【讨论】:

  • 我怎样才能有一个盒子布局,里面有两个按钮,每个按钮之间至少有 10 个像素?我似乎无法理解。
  • Box.createHorizontalStrut(10) 在按钮之间,FlowLayout
  • 酷。另一个人在代码中提到了这一点,但我试图从 IDE(netbeans)中做到这一点。事实证明,您可以通过调整“插图”在布局管理器中直观地做到这一点。
  • 我将永远被称为“另一个人”:-(
【解决方案4】:

使用值为 1 的 addSeparator 使其对我来说是不可见的,例如:

MyJToolBar.addSeparator(new Dimension(20, 1));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 2012-01-12
    • 1970-01-01
    • 2011-09-05
    • 2017-10-27
    • 2017-09-04
    • 1970-01-01
    • 2010-10-24
    相关资源
    最近更新 更多