我怎样才能摆脱 JCombobox 中的蓝色突出显示?

How can i get rid of the blue highlight inside JCombobox?

JCombobox 的“内容”window 有蓝色突出显示,我不知道如何去除,请帮忙。

这里是问题的一个例子:

package example;

import java.awt.CardLayout;
import java.awt.Color;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Example {

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(1);
        frame.setSize(500, 500);
        frame.setLayout(new CardLayout());
        frame.setVisible(true);
        
        JPanel panel=new JPanel();
        panel.setLayout(null);
        frame.add(panel);

        String[] model = {"pres.", "PPS.", "P. inp.", "P. mais q."};

        JComboBox combox;
        combox = new JComboBox(model);
        combox.setBounds(100, 100, 145, 30);
        combox.setBackground(new Color(215, 211, 165));
        combox.setFocusable(false);
        panel.add(combox);
        
        panel.updateUI();
    }

}

组合框是一个内部使用多个组件的复杂组件。 UI 决定组件如何相互作用。

例如,将您的代码更改为以下内容:

JComboBox combox;
combox = new JComboBox(model);
combox.setBorder( new LineBorder(Color.YELLOW) );
BasicComboBoxRenderer renderer = new BasicComboBoxRenderer();
renderer.setBorder( new LineBorder(Color.RED) );
combox.setRenderer(renderer);

您会注意到蓝色突出显示不是组合框或其渲染的边框,这意味着还有另一个我们无法访问的内部容器。

如果你真的想解决这个问题,那么你将需要自定义MetalComboBoxUI class,这绝非易事,因为许多绘画方法都是私有的。不过看看class的代码,看看能不能搞定。

您的代码的其他问题:

  1. 不要使用 updateUI()。当 LAF 更改时,该方法在 Swing 内部调用。您没有更改 LAF

  2. 应在框架可见之前将组件添加到框架中。这将消除对 updateUI().

    的需要