user5354385
user5354385

Reputation:

Java:Swing:Nimbus:JComboBox editable box looks different from not editable box

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.

editable and not editable box

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:

enter image description here

Upvotes: 0

Views: 135

Answers (2)

user5354385
user5354385

Reputation:

The reason is, I set the border directly on the JComboBox and not on the JPanel surrounding it.

enter image description here

Upvotes: 0

Abra
Abra

Reputation: 20913

This is how it looks on my Windows 10 (64 bit) machine with Oracle's JDK 15

Nimbus00

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());
    }
}

Upvotes: 1

Related Questions