Java 如何填充组合框?
我正在应用程序中使用Java 如何填充组合框?,java,swing,jcombobox,Java,Swing,Jcombobox,我正在应用程序中使用JComboBox,我想增加填充。我的组合框中的所有初始内容都非常靠近左边框对齐,因此我想填充它,使其看起来有点易读 这是我在应用程序中使用的一些示例代码: jPanelPatientInfo.add(jComboBoxNation, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 10,
JComboBox
,我想增加填充。我的组合框中的所有初始内容都非常靠近左边框对齐,因此我想填充它,使其看起来有点易读
这是我在应用程序中使用的一些示例代码:
jPanelPatientInfo.add(jComboBoxNation, new GridBagConstraints(1, 3, 1, 1, 0.0, 0.0,
GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(0, 10, 0, 0), 0, 0));
尝试调用组合框。这将根据使用的文本量设置宽度。如链接文档中所述,如果没有,则根据每个元素的大小使用首选宽度。尝试调用组合框。这将根据使用的文本量设置宽度。如链接文档中所述,如果没有,则根据每个元素的大小使用首选宽度。在面板上为组件提供更多空间的最简单方法是在面板上添加边框。看起来您正在使用GridBagLayout,因此代码类似于:
JPanel panel = new JPanel( new GridBagLayout() );
panel.addBorder( new EmptyBorder(10, 10, 10, 10) );
panel.add(component1, constraints);
现在,如果在不同的行上添加组件,它们都将缩进10像素。在面板上为组件提供更多空间的最简单方法是在面板上添加边框。看起来您正在使用GridBagLayout,因此代码类似于:
JPanel panel = new JPanel( new GridBagLayout() );
panel.addBorder( new EmptyBorder(10, 10, 10, 10) );
panel.add(component1, constraints);
现在,如果您在不同的行上添加组件,它们都将缩进10个像素。我假设您希望增加
JComboBox
(列表部分)内部的填充。问问题时,你需要更具体一些
这里有一种方法可以填充JComboBox
的内部
import java.awt.Component;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
public class BorderListCellRenderer implements ListCellRenderer {
private Border insetBorder;
private DefaultListCellRenderer defaultRenderer;
public BorderListCellRenderer(int rightMargin) {
this.insetBorder = new EmptyBorder(0, 2, 0, rightMargin);
this.defaultRenderer = new DefaultListCellRenderer();
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
JLabel renderer = (JLabel) defaultRenderer
.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
renderer.setBorder(insetBorder);
return renderer;
}
}
然后,像这样使用这个类
JComboBox comboBox = new JComboBox(elements);
comboBox.setRenderer(new BorderListCellRenderer(20));
我假设您希望在
JComboBox
(列表部分)的内部增加填充。问问题时,你需要更具体一些
这里有一种方法可以填充JComboBox
的内部
import java.awt.Component;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.border.Border;
import javax.swing.border.EmptyBorder;
public class BorderListCellRenderer implements ListCellRenderer {
private Border insetBorder;
private DefaultListCellRenderer defaultRenderer;
public BorderListCellRenderer(int rightMargin) {
this.insetBorder = new EmptyBorder(0, 2, 0, rightMargin);
this.defaultRenderer = new DefaultListCellRenderer();
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
JLabel renderer = (JLabel) defaultRenderer
.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus);
renderer.setBorder(insetBorder);
return renderer;
}
}
然后,像这样使用这个类
JComboBox comboBox = new JComboBox(elements);
comboBox.setRenderer(new BorderListCellRenderer(20));
Thanks@Gilbert勒布朗:我通过引用你的重要方法得到了解决办法。Thanks@Gilbert勒布朗:我通过引用你的重要方法得到了解决办法。