Java:Swing:Nimbus:JComboBox可编辑框看起来与不可编辑框不同

问题描述

一个JComboBox是可编辑的,并且其TitledBorder看起来不错。但是第二个不可编辑的JComboBox看起来很奇怪。 所有JComboBox都包含枚举,因此它们不应是可编辑的,但应具有可编辑JComboBox的漂亮外观。我该如何实现?我正在使用Nimbus。

editable and not editable box

编辑

也许与我为Nimbus选择的设置有关?这些是设置:

     NimbusLookAndFeel nimbus = new NimbusLookAndFeel();
     UIManager.setLookAndFeel(nimbus);
     UIManager.put("control",Settings.getTexturedBackgroundColor());
     UIManager.put("nimbusBlueGrey",Settings.getLightGrayGold());
     UIManager.put("nimbusBase",Settings.getDarkGold());
     UIManager.put("textForeground",Color.BLACK);
     UIManager.put("nimbusFocus",new Color(255,220,35));
     UIManager.put("ToolBar:Button.contentMargins",new Insets(5,15,5,15));
     UIManager.put("TextField.background",Settings.getLightYellow());
     UIManager.put("ComboBox.forceOpaque",false);
     UIManager.put("TitledBorder.border",new Insets(10,10,10));
     UIManager.put("TitledBorder.position",TitledBorder.ABOVE_BottOM);
     UIManager.put("TitledBorder.font",getGermanFont(16F));
     UIManager.put("TitledBorder.titleColor",Color.GRAY);
     UIManager.put("Table.opaque",false);
     UIManager.put("List.opaque",false);
     UIManager.put("Table.cellRenderer",false);
     UIManager.put("OptionPane.buttonFont",Main.getGermanFont(16F));

EDIT2

不,这与Nimbus设置无关:

enter image description here

解决方法

这是在装有Oracle JDK 15的Windows 10(64位)计算机上的外观

Nimbus00

这是代码。

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.BorderFactory;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.WindowConstants;
import javax.swing.border.TitledBorder;

public class Nimbus00 {
    private JFrame  frame;

    private JPanel createEditableCombo() {
        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(),"Editable",TitledBorder.LEADING,TitledBorder.BOTTOM));
        Object[] items = new Object[]{"One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten"};
        JComboBox<Object> combo = new JComboBox<>(items);
        combo.setEditable(true);
        panel.add(combo);
        return panel;
    }

    private JPanel createNonEditableCombo() {
        JPanel panel = new JPanel();
        panel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(),"Regular",TitledBorder.BOTTOM));
        Object[] items = new Object[]{"First","Second","Third","Fourth","Fifth","Sixth","Seventh","Eighth","Ninth","Last"};
        JComboBox<Object> combo = new JComboBox<>(items);
        combo.setPrototypeDisplayValue("WWWWWWWWWW");
        panel.add(combo);
        return panel;
    }

    private void showGui() {
        frame = new JFrame();
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(createEditableCombo(),BorderLayout.PAGE_START);
        frame.add(createNonEditableCombo(),BorderLayout.PAGE_END);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
        }
        catch (ClassNotFoundException |
               IllegalAccessException |
               InstantiationException |
               UnsupportedLookAndFeelException x) {
            x.printStackTrace();
        }
        EventQueue.invokeLater(() -> new Nimbus00().showGui());
    }
}
,

原因是,我直接在JComboBox上而不是在其周围的JPanel上设置边框。

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...