The first JComboBox is editable and looks fine with its TitledBorder. But the second not editable JComboBox looks strange. All the JComboBoxes contain Enums, therefore they should not be editable but they should have the nice look of the editable JComboBox. How can I achieve that? I am using Nimbus.
EDIT
Maybe it has to do with the settings I choose for Nimbus? These are the settings:
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, 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
No, it does not have to do with the Nimbus settings:
This is how it looks on my Windows 10 (64 bit) machine with Oracle's JDK 15
Here is the code.
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.LEADING,
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());
}
}