【问题标题】:How to add padding to JCombobox如何向 JCombobox 添加填充
【发布时间】:2012-04-07 23:20:04
【问题描述】:

想象一个Panel 与一个可编辑的JCombobox 和一个JTextfield 按垂直顺序排列。

Textfield 显示其内容时在左边缘有一个小填充,Combobox 没有。

有人知道我如何将此填充添加到JCombobx 吗?

我尝试设置渲染器,但 javadoc 说:

设置渲染列表项和选定项的渲染器 从列表中 JComboBox 字段。如果没有 JComboBox,则使用渲染器 可编辑。如果是可编辑的,则使用编辑器进行渲染和编辑 选定的项目。

最好的问候 马可

【问题讨论】:

标签: java swing padding jcombobox jtextfield


【解决方案1】:

在这里,setPrototypeDisplayValue 可能对您有所帮助,但实际上我们需要问题的屏幕截图以及您需要更改的内容。

【讨论】:

  • 不,原型与视觉表现的细节无关,它仅用于测量显示项目所需的(固定)尺寸。
  • 是的,我想视觉表示和显示一个项目是完全不同的?
【解决方案2】:

您可以使用JTextField#setMargin 去除边距。不完全符合您的要求,但是,您的组件将对齐。

另一种解决方案是使用FlowLayout,使用setHGap手动设置容器边框与组件之间的距离,仍然使用JTextField#setMargin方法确保复选框和文本字段对齐

【讨论】:

    【解决方案3】:

    如果我理解正确,这取决于您使用的 LayoutManager。 在此示例中:http://pastebin.com/PFr1jafP 您将看不到您提到的任何填充。

    尝试提供您想要达到的目标的小代码示例/屏幕截​​图,以获得更好的答案。

    【讨论】:

      【解决方案4】:

      渲染空间的非常简单的修复......

      创建一个单元格渲染器并将其添加到组合框中,在空格中添加或只是添加

      setBorder(new EmptyBorder(1, 1, 1, 1)); o 单元格渲染器

      要么

      @Override
          public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
      
              JComponent comp = (JComponent) super.getListCellRendererComponent(list, " "+value, index, isSelected, cellHasFocus);
      
              return comp;
          }
      

      或

      @Override
          public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
      
              JComponent comp = (JComponent) super.getListCellRendererComponent(list,value, index, isSelected, cellHasFocus);
              comp.setBorder(new EmptyBorder(1, 1, 1, 1));
              return comp;
          }
      

      【讨论】:

      • 第二个是更好的实现
      猜你喜欢
      • 2012-02-06
      • 2019-02-19
      • 1970-01-01
      • 2019-08-14
      • 2014-10-02
      • 1970-01-01
      • 2013-01-29
      • 2011-12-15
      • 2019-07-31
      相关资源
      最近更新 更多