JComboBox,在选择之间设置 space
JComboBox, set space between choices
我已经创建了一个可以在电脑和平板电脑上使用的程序。问题是当您按下 JComboboxes 时出现的选项在平板电脑上变得非常小。您如何轻松获得选项之间的小差距?或者是否有其他替代解决方案来解决此问题?
感谢您的所有帮助和贡献。
您可以为组合框定义自己的列表单元格渲染器,并让该自定义渲染器在所有四个边上提供填充。
这是一个展示如何操作的小程序。虽然您不能按字面意思在列表中的项目之间放置空格,但列表渲染器将允许您在列表中的数据项周围放置填充,这应该使 select 更容易。 setBorder() 是你改变填充的地方,如果你想要更多或更少。
import java.awt.Component;
import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.ListCellRenderer;
class CustomComboBoxRenderer extends JTextField implements ListCellRenderer
{
public CustomComboBoxRenderer()
{
this.setBorder(BorderFactory.createCompoundBorder( this.getBorder(),
BorderFactory.createEmptyBorder(15, 0, 10, 0)));
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
this.setText(value.toString());
return this;
}
}
public class Gui extends JFrame{
JPanel panel = new JPanel();
String[] data = new String[]{"A","B","C","D","E","F"};
ComboBoxModel model = new DefaultComboBoxModel(data);
JComboBox combo = new JComboBox(model);
CustomComboBoxRenderer renderer = new CustomComboBoxRenderer();
public Gui()
{
combo.setRenderer(renderer);
JPanel content = new JPanel();
content.add(combo);
setContentPane(content);
pack();
setLocation(300,300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public static void main(String[] args)
{
new Gui();
}
}
我已经创建了一个可以在电脑和平板电脑上使用的程序。问题是当您按下 JComboboxes 时出现的选项在平板电脑上变得非常小。您如何轻松获得选项之间的小差距?或者是否有其他替代解决方案来解决此问题? 感谢您的所有帮助和贡献。
您可以为组合框定义自己的列表单元格渲染器,并让该自定义渲染器在所有四个边上提供填充。
这是一个展示如何操作的小程序。虽然您不能按字面意思在列表中的项目之间放置空格,但列表渲染器将允许您在列表中的数据项周围放置填充,这应该使 select 更容易。 setBorder() 是你改变填充的地方,如果你想要更多或更少。
import java.awt.Component;
import javax.swing.BorderFactory;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.ListCellRenderer;
class CustomComboBoxRenderer extends JTextField implements ListCellRenderer
{
public CustomComboBoxRenderer()
{
this.setBorder(BorderFactory.createCompoundBorder( this.getBorder(),
BorderFactory.createEmptyBorder(15, 0, 10, 0)));
}
@Override
public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
if (isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
} else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
this.setText(value.toString());
return this;
}
}
public class Gui extends JFrame{
JPanel panel = new JPanel();
String[] data = new String[]{"A","B","C","D","E","F"};
ComboBoxModel model = new DefaultComboBoxModel(data);
JComboBox combo = new JComboBox(model);
CustomComboBoxRenderer renderer = new CustomComboBoxRenderer();
public Gui()
{
combo.setRenderer(renderer);
JPanel content = new JPanel();
content.add(combo);
setContentPane(content);
pack();
setLocation(300,300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
public static void main(String[] args)
{
new Gui();
}
}