【问题标题】:SetTitlePosition on the left of a JComponentJComponent 左侧的 SetTitlePosition
【发布时间】:2011-03-08 11:18:43
【问题描述】:

是否可以在 JComponent 的左侧(或右侧)放置标题?

我不是说理由,而是真正的立场..

我在与 JComponent 关联的 TitledBorder 上尝试了 setTitlePosition(TitledBorder.LEFT) 但似乎不起作用(也许 left 只是为了证明?)

如果不可能,有没有人有一个非常简单的方法来达到这个效果?

我想写一些这样的代码:

 TitledBorder titleB = new TitledBorder(description);
 titleB.setTitlePosition(LEFT); 

【问题讨论】:

  • JComponent中没有setTitlePosition方法;您要设置标题的实际组件类型是什么。我猜是 TitledBorder?
  • @TheStijn 是的,谢谢.. 我这么说是为了说明关联的 TitledBorder 的左侧位置是相对于 JComponent 的。也许现在更清楚了
  • 为什么不将 JLabel 放在与组件相同的行上,而是放在第一列上?直接使用最常见的 LayoutManager:GridBagLayout、DesignGridLayout、MigLayout...此外,不鼓励使用 TitledBorder(查看 Karsten Lentzsch 演示文稿)。
  • @jfpoilpret:是的,这很简单。但我正在重构一个现有的工作项目。 TitledBorder 用于在对象上放置标签,一切都以这种方式实现。所以如果我找不到我的解决方法,我必须重写很多代码:(

标签: java swing


【解决方案1】:

我猜你得到了一个IllegalArgumentException,因为 LEFT 显然不是一个有效的位置。这是 TitledBorder.setTitlePosition 的代码:

  switch (titlePosition) {
      case ABOVE_TOP:
      case TOP:
      case BELOW_TOP:
      case ABOVE_BOTTOM:
      case BOTTOM:
      case BELOW_BOTTOM:
      case DEFAULT_POSITION:
            this.titlePosition = titlePosition;
            break;
      default:
        throw new IllegalArgumentException(titlePosition +
                                    " is not a valid title position.");
    }

我认为设置组件的左/右标题不存在 OOTB。但是,您可以创建自己的边框,或者(可能)更轻松地创建自己的组件,该组件具有垂直显示文本的标签,然后使用 BorderLayout LEFT/RIGHT 将此自定义组件添加到面板等。

问候,
斯蒂金

【讨论】:

  • 不,我不是在寻找理由。我真的想在相关 JComponent 的左侧或右侧放一个标题。
  • 好的,那么实际上您希望边框位于组件的左侧还是右侧?
【解决方案2】:

几个JComponent 子类,例如标签和按钮的子类,包括设置组件标题文本相对于其图标的水平和垂直位置的方法。这个example 显示DefaultTableCellRendererJLabel 的子类,右侧有标签:

this.setHorizontalAlignment(JLabel.RIGHT);

【讨论】:

  • 我想我没听懂你的回答。也许我不清楚问这个问题。现在我编辑了它。我怎样才能使用 titledborder 实现类似的效果?
  • @Overbose:对不起,我误解了这个问题。 @TheStijn 走在正确的轨道上。 relevant tutorial 有更多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-10
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多