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

为了清楚起见,当我从组合框中 Select 一项时,此框关闭列表并仅显示所选的项.我想要居中的就是这件衣服.

有没有办法做到这一点?

推荐答案

这由渲染器控制.

当传递给渲染器的索引为-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() );
   }
}

Java相关问答推荐

我们如何直接使用kerminldap服务票证来通过ldap进行身份验证并形成LDAP上下文

将linkedHashMap扩展到Java中的POJO类

如何在Docker容器中使用wireock—Webhooks阻止请求?

CriteriaQuery with max

解析Javadoc时链接的全限定类名

Java记录的不同序列化/反序列化

从ActiveMQ Classic迁移到ActiveMQ Artemis需要进行哪些客户端更改?

Log4j与jdk21兼容吗?

在Java中将int[]矩阵添加到ArrayList中,但出现错误

Spring Boot&;Docker:无法执行目标org.springframework.boot:spring-boot-maven-plugin:3.2.0:build-image

Java Telnet客户端重复的IAC符号

Java页面筛选器问题

二进制数据的未知编码/序列化

Spring Boot中的应用程序.properties文件中未使用的属性

S数学.exp的相同错误保证也适用于StrictMath.exp吗?

使IntelliJ在导入时优先 Select 一个类或将另一个标记为错误

IntelliJ IDEA中的JavaFX应用程序无法在资源中找到CSS文件

ReturnedRect在升级后反转

Spring Boot Security-每个端点都被403禁止,Spring记录一个BasicErrorController#错误(HttpServlet请求)

Spring Boot应用程序中的自定义constraintvalidator不会被调用