有没有办法仅将 JComboBox 中的选定项目居中(因此保持组合框中的所有项目左对齐)

问题描述 投票:0回答:1

我知道有一种简单的方法可以将 JComboBox 中的所有项目居中,但我已经在 StackOverflow 和整个网络上进行了搜索,但没有讨论如何仅将所选项目居中。

为了明确起见,当我从组合框中选择一个项目时,此框会关闭列表并仅显示所选项目。我想要的就是这个项目居中。

有办法吗?

java swing jcombobox
1个回答
1
投票

这是由渲染器控制的。

当传递给渲染器的索引为 -1 时,将渲染所选项目。

您可以创建自定义渲染器并根据索引更改文本的对齐方式:

import java.awt.Component;
import javax.swing.*;
import javax.swing.plaf.basic.BasicComboBoxRenderer;

public class ComboRenderer
{
   public void makeUI()
   {
      JComboBox<String> comboBox = new JComboBox<>(new String[]{"A", "B", "C"});

      comboBox.setRenderer(new BasicComboBoxRenderer()
      {
         @Override
         public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
         {
            super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);

            setHorizontalAlignment( index == -1 ? JLabel.CENTER : JLabel.LEFT );

            return this;
         }
      });

      JFrame frame = new JFrame();
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.add(comboBox);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args)
   {
      SwingUtilities.invokeLater(() -> new ComboRenderer().makeUI() );
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.