Swing Wie ändere ich den Hintergrund vom Anzeigefeld einer JComboBox, die nicht zum Hineinschreiben offen steht?

Drachenbauer

Aktives Mitglied
Hallo

Ich Möchte das Farbshema in einem Dialog von meinem Spiel von den standard-blaugrau-tönen auf Sandfarben ändern.

Den Farbverlauf der Buttons habe ich bereits über
Java:
private UIManager manager=new UIManager();
und
Java:
a.add(0.3;
a.add(0.3);

a.add(new ColorUIResource(159, 159, 95));

a.add(new ColorUIResource(223, 223, 159));

a.add(new ColorUIResource(95, 95, 31));

manager.put("Button.gradient", a);
Hinbekommen

Der Dialog enthält aber auch eine JComboBox, die so eingestellt ist, dass ich nichts hineinschreiben kann, sondern nur die vorhandenen Liste-Einträge auswählen.

Jetzt möchte ich gerne auch die Hintergrundfarbe vom Anzeigefeld (auch zusehen, wenn die Liste nicht ausgeklappt ist) der Combobox ändern.

Welche der vielen Eigenschaften, die man da mit manager.put(); einfügen kann, ändert diese Farbe?

Und Mit welchen Eigenschaften ändere ich die Konturfarben der Kompunenten und die Farbe vom Auswahlrahmen, der auf einem Button erscheint, auf den die Maus zeigt?
 

Drachenbauer

Aktives Mitglied
Es gibt das hier aus:
javax.swing.plaf.metal.MetalLookAndFeel

Wie stelle ich ein LAF ein, bei dem alle Eigenschaften greifen, die im UI-Manager eingesetzt werden können, wenn ich an meinen Komponenten direkt keine Veränderung angebe?
 

mihe7

Top Contributor
Andersrum wird ein Schuh draus: Du musst wissen, welches LAF Du verwendest, dann kannst Du sagen, welche Properties von diesem LAF verwendet werden.
 

Drachenbauer

Aktives Mitglied
Kann ich denn nicht ein LAF erstellen, das meinem Wunsch entspricht?

Oder wie finde ich heraus, wie ich bei dem MetalLookAndFeel den gewünschten Hintergrund der Combobox anpassen kann (der blaugraue Hintergrund, der zusehen ist, wenn man nicht hineinschreiben kann, soll baige werden.)

Die Combobox benutzt übrigens einen Render, der sie ais JLabels zusammensetzt, damit ich kleine Bildchen neben den Texten benutzen kann.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Kann ich denn nicht ein LAF erstellen, das meinem Wunsch entspricht?
Klar, wenn Du Dir das antun willst :)https://docs.oracle.com/javase/tutorial/uiswing/lookandfeel/synth.html

Oder wie finde ich heraus, wie ich bei dem MetalLookAndFeel den gewünschten Hintergrund der Combobox anpassen kann

Wenn Du es genau wissen willst, musst Du in den Quellcode schauen. Mit dem Tool aus dem Link oben solltest Du aber anhand der Property-Namen in etwa sehen, welche Property Du brauchst.
 

mihe7

Top Contributor
Java:
import javax.swing.*;

public class Test {

    public void run() {
        UIManager.put("ComboBox.selectionBackground", java.awt.Color.GREEN);
        String[] items = {"A","B","C","D"};
        JComboBox<String> box = new JComboBox<>(items);
        box.setPrototypeDisplayValue("Ein wenig Text");
        box.setEditable(false);
    
        
        JPanel p = new JPanel();
        p.add(box);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(p);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }
}
Wird bei mir Grün angezeigt.
 

Drachenbauer

Aktives Mitglied
Mein Dialogfeld 1.png

Das, was hier noch blaugrau ist, möchte ich umfärben.

Java:
UIManager.put("ComboBox.selectionBackground", java.awt.Color.GREEN);
Bei mir bleibt es blaugrau, auch wenn ich da meinen Sand-Farbton eingebe.

Liegt es vielleicht daran, dass meine Combobox einen ListCellRenderer benutzt, der das Aneigen von symbolen an den Einträgen ermöglicht?
 
Zuletzt bearbeitet:

Drachenbauer

Aktives Mitglied
Java:
    class ComboBoxRenderer extends JLabel implements ListCellRenderer
    {
        public ComboBoxRenderer()
        {
            setOpaque(true);
            setHorizontalAlignment(CENTER);
            setVerticalAlignment(CENTER);
        }
        
        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
        {
            int selectedIndex = ((Integer)value).intValue();
            
            if (isSelected)
            {
                setBackground(new Color(223, 223, 159));
                setForeground(list.getSelectionForeground());
                level_number = selectedIndex;
            }
            else
            {
                setBackground(new Color(255, 255, 191));
                setForeground(list.getForeground());
            }
            
            setIcon(images[selectedIndex]);
            setText("Level " + selectedIndex);
            setFont(list.getFont());
            
            return this;
        }
    }

Das ist eine Klasse innerhalb der Klasser meines Dialoges.
 

mihe7

Top Contributor
Java:
import java.awt.Color;
import java.awt.Component;
import javax.swing.plaf.ColorUIResource;
import javax.swing.*;

public class Test {

    public void run() {
        UIManager.put("ComboBox.selectionBackground", new ColorUIResource(223, 223, 159));
        String[] items = {"A","B","C","D"};
        JComboBox<String> box = new JComboBox<>(items);
        box.setPrototypeDisplayValue("Ein wenig Text");
        box.setEditable(false);
        ComboBoxRenderer r = new ComboBoxRenderer();
        r.setPreferredSize(new java.awt.Dimension(200,20));
        box.setRenderer(r);
    
        JPanel p = new JPanel();
        p.add(box);

        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.add(p);
        frame.setSize(800, 600);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().run());
    }

    class ComboBoxRenderer extends JLabel implements ListCellRenderer
    {
        public ComboBoxRenderer()
        {
            setOpaque(true);
            setHorizontalAlignment(CENTER);
            setVerticalAlignment(CENTER);
        }
        
        @Override
        public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
        {
            if (isSelected)
            {
                setBackground(new Color(223, 223, 159));
                setForeground(list.getSelectionForeground());
            }
            else
            {
                setBackground(new Color(255, 255, 191));
                setForeground(list.getForeground());
            }

            setText((String) value);            
            setFont(list.getFont());
            
            return this;
        }
    }
}
 

Drachenbauer

Aktives Mitglied
Ach ja, ich habe die Dinge, die mit dem UI-Manager zutun haben, in der Frame-Klasse platziert, die mein Spiel Startet.

Erst hatte ich sie in einem der beiden Dialoge des Spieles, und gesehen, dass der andere sich dadurch auch verändert.
Da dachte ich, vielleicht Wirkt es sich ja auf alle Bestandteile meines Spieles aus, wenn ich es in die Frame-Klasse packe, und muss es nicht auf jeden Dialog einzeln anwenden.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Du dürftest die Properties beim Start Deiner Anwendung (nach dem etwaigen Setzen eines LAF) einstellen können, dann sollten sie sich auf alle Bestandteile Deiner Anwendung auswirken.
 

Drachenbauer

Aktives Mitglied
Dieser Hintergrund und die dunklen Konturen ändern sich aber nicht bei mir.

Die Kontur von dem Pfeil-Knopf der Combobox hatte sich geändert, als ich die Einstellungen in dem Dialog platziert hatte, tut es aber nicht, wenn die Einstellungen im Start-Farme platziert sind.
Wie kommt das?

Ich hatte es im Constructor der Frame-Klasse, jetzt habe ich es in die Main-Methode gesetzt, oberhalb des bisherigen Inhaltes der Methode.

Jetzt werden die Farben angepasst.

Aber die Kontur von dem Feld der Combobox ist immernoch blaugrau.
 
Zuletzt bearbeitet:

mihe7

Top Contributor

Drachenbauer

Aktives Mitglied
Den Background habe ich ja jetzt, jetzt fehlt noch die Kontur, das meinte ich in meinem letzten Satz.

Als ich die Sachen in die Main-Methode verschoben hatte, wurde einiges angepasst, was zuvor keinen Effekt hatte.

Aber ich brauche halt noch die passende Kontur zum soeben angepassten Hintergrund.
 

mihe7

Top Contributor

Was ich auf die Schnelle hinbekomme habe:
Java:
// allgemein
        UIManager.put("ComboBox.border", BorderFactory.createLineBorder(Color.RED));
// für die ComboBox box:
        for (Component c : box.getComponents()) {
            if (c instanceof JComponent) {
                ((JComponent)c).setBorder(BorderFactory.createEmptyBorder());
            }
        }
 

Drachenbauer

Aktives Mitglied
der zweite Teil davon (for-loop) entfernt nur die Kontur vom Button der Combobox, die ist aber durch Button.border schon passend gesetzt.

und den ersten Teil habe ich schon bei den Einstellungen drin.

Vielleicht sollten wir das in meinem Anderen Thema, wo es direkt um Konturen geht, weiter diskutieren, und dieses hier als beendet erklären.

Dort suche ich auch noch nach einer Lösung für die Button-Fokus-Kontur.
 

Drachenbauer

Aktives Mitglied
da ist immernoch ein hellblauer Rest an den Schmalseiten des Textfeldes und der Button ist nicht komplett mit einer eigenen Kontur umgeben.

Der UiManager erkennt ja den Button der combobox als Button und wendet entsprechende Eigenschaften auch auf diesen an.
Aber welcher Komponenten-Typ ist das Textfeld der Combobox für den UIManager?
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Lukas2904 LookAndFeel Wie ändere ich das allgemeine Disigne des Fensters? AWT, Swing, JavaFX & SWT 4
Drachenbauer Swing Wie ändere ich die Farbe der Konturen von jButton und jCombobox? AWT, Swing, JavaFX & SWT 18
Drachenbauer Swing Wie ändere ich die helle geklickt-Farbe von einem JButton? AWT, Swing, JavaFX & SWT 4
P AWT Fenster aktualisieren, nachdem ich JComboBox ändere AWT, Swing, JavaFX & SWT 9
K Swing Wie ändere ich die default action für Drag&Drop AWT, Swing, JavaFX & SWT 6
frager2345 Bild aus Dateien lesen und als Hintergrund verwenden AWT, Swing, JavaFX & SWT 2
1 2D-Grafik Flackerndes Hintergrund AWT, Swing, JavaFX & SWT 1
ralfb1105 JavaFX HTTP Download task im Hintergrund innerhalb GUI AWT, Swing, JavaFX & SWT 70
A Fehler beim Hintergrund AWT, Swing, JavaFX & SWT 17
C Java Hintergrund funktioniert nicht AWT, Swing, JavaFX & SWT 9
A Bilder als Hintergrund AWT, Swing, JavaFX & SWT 2
BobbGott durchsichtiges JTextField mit Hintergrund AWT, Swing, JavaFX & SWT 12
L JPanel zeichnet im Konstrukter erzeugten Hintergrund nicht AWT, Swing, JavaFX & SWT 10
P Jframe Bild einfügen, Hintergrund Farbe ändern, und Button schrift Größe ändern AWT, Swing, JavaFX & SWT 2
T Hintergrund für GUI AWT, Swing, JavaFX & SWT 1
I 2D-Grafik Bilder Eingefügt, button jetzt im Hintergrund AWT, Swing, JavaFX & SWT 2
F JTable Zellen-Hintergrund ändern AWT, Swing, JavaFX & SWT 7
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
H Textfield bleibt im Hintergrund AWT, Swing, JavaFX & SWT 2
E JTable Hintergrund von geklickter Zelle ändern AWT, Swing, JavaFX & SWT 2
wolfgang63 JavaFX Transparenter Hintergrund aber sichtbare Buttons AWT, Swing, JavaFX & SWT 6
F 2D-Grafik Den Hintergrund loopen AWT, Swing, JavaFX & SWT 3
V LookAndFeel JSpinner Hintergrund Farbe mit Nimbus LaF AWT, Swing, JavaFX & SWT 0
O 2D-Grafik Bild abgeschnitten nach Rotation mit Affine Transform und Hintergrund Schwarz AWT, Swing, JavaFX & SWT 8
O Hintergrund von AffineTransfom (rotation) ändern AWT, Swing, JavaFX & SWT 0
D paintComponent() mit transparentem Hintergrund. AWT, Swing, JavaFX & SWT 0
C JFrame paint ohne hintergrund nutzen AWT, Swing, JavaFX & SWT 6
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2
S Swing, Button benutzen zum Hintergrund wechseln AWT, Swing, JavaFX & SWT 3
N Swing microba - DatePicker: Feld-Hintergrund anpassen AWT, Swing, JavaFX & SWT 2
M Tastatureingabe im Hintergrund (JTable) AWT, Swing, JavaFX & SWT 2
B Hintergrund laden AWT, Swing, JavaFX & SWT 3
B Swing Zähler im Hintergrund falsch berechnet - Warum? AWT, Swing, JavaFX & SWT 3
J JButton Hintergrund AWT, Swing, JavaFX & SWT 5
L Gradient Hintergrund malen und durchscheinen lassen AWT, Swing, JavaFX & SWT 8
K Swing JTable Text im Hintergrund einer leeren Tabelle AWT, Swing, JavaFX & SWT 3
L Beim Neuzeichnen einer Swing GUI kurz Schwarzer Hintergrund AWT, Swing, JavaFX & SWT 8
D Swing Probleme bei transparenten Hintergrund im JTextField AWT, Swing, JavaFX & SWT 6
J Swing Malen auf JPanel mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 21
S 2D-Grafik Bild bleibt im Hintergrund bei Diashow AWT, Swing, JavaFX & SWT 3
D Applet hintergrund wird nicht weiß AWT, Swing, JavaFX & SWT 2
B JList transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
J Speichern, Event, Hintergrund getAppletContext AWT, Swing, JavaFX & SWT 2
E Swing JPanel mit Hintergrund AWT, Swing, JavaFX & SWT 3
L Bilder im JPanel als Hintergrund - Swing AWT, Swing, JavaFX & SWT 2
kniffel GUI-Applet JTable füllt Hintergrund völlig aus AWT, Swing, JavaFX & SWT 4
J Hintergrund Label-Frame AWT, Swing, JavaFX & SWT 3
A Hintergrund von einem Frame ändern AWT, Swing, JavaFX & SWT 3
T Hintergrund AWT, Swing, JavaFX & SWT 4
T Hintergrund für 3D Erde AWT, Swing, JavaFX & SWT 4
G 2D-Grafik BufferedImage Hintergrund immer schwarz AWT, Swing, JavaFX & SWT 4
P Swing Zeichnung auf Tab im Hintergrund wird nicht gezeichnet AWT, Swing, JavaFX & SWT 3
J Label mit transparentem hintergrund - geht das? AWT, Swing, JavaFX & SWT 21
B AWT Bild als Hintergrund im Applet AWT, Swing, JavaFX & SWT 2
R Bedeckter Hintergrund AWT, Swing, JavaFX & SWT 17
D Komponenten um weitere Hintergrund- bzw. Vordergrundfarbe erweitern AWT, Swing, JavaFX & SWT 11
M JFrame (Mausrad, Hintergrund) AWT, Swing, JavaFX & SWT 13
Dragonfire Swing Hintergrund aller Komponenten verändern AWT, Swing, JavaFX & SWT 2
DStrohma Swing JPanel mit Bild als Hintergrund AWT, Swing, JavaFX & SWT 2
B Swing Image als Hintergrund im JInternalFrame - Problem AWT, Swing, JavaFX & SWT 3
N GridBagLayout, leere grids (Hintergrund) transparent? AWT, Swing, JavaFX & SWT 3
J Swing JPanel mit Hintergrund zeigt componente nicht AWT, Swing, JavaFX & SWT 6
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
algorismi JCompnent mit transparentem Hintergrund AWT, Swing, JavaFX & SWT 4
T Schließen eines JDialogs setzen den JFrame in den Hintergrund AWT, Swing, JavaFX & SWT 2
J CellRenderer einzelne zellen Hintergrund AWT, Swing, JavaFX & SWT 9
R JTable Hintergrund der Zeile abhängig von Inhalt einer Zelle verändern AWT, Swing, JavaFX & SWT 3
E Progress Bar mit Bild als Hintergrund AWT, Swing, JavaFX & SWT 2
N Swing Hintergrund Bild in JAR Datei AWT, Swing, JavaFX & SWT 2
N im fenster ein hintergrund bild einfügen AWT, Swing, JavaFX & SWT 18
A Swing Mit Graphics2D auf transparentem Hintergrund zeichnen AWT, Swing, JavaFX & SWT 7
A Hintergrund erstellen AWT, Swing, JavaFX & SWT 13
J Layer von JLayeredPane unsichtbar durchsichtig in den Hintergrund AWT, Swing, JavaFX & SWT 5
T GridLayout Zeilen Hintergrund AWT, Swing, JavaFX & SWT 5
P Swing JComboBox beschädigt hintergrund AWT, Swing, JavaFX & SWT 4
S JButton - Hintergrund verändern AWT, Swing, JavaFX & SWT 7
J Fensterrand überdeckt Hintergrund AWT, Swing, JavaFX & SWT 9
K JTable hintergrund AWT, Swing, JavaFX & SWT 12
SebSnake Animiertes GIF auf JPG Hintergrund darstellen? AWT, Swing, JavaFX & SWT 3
G Label auf Panel auf Panel mit Grafiken als Hintergrund (awt) AWT, Swing, JavaFX & SWT 7
G TextField im Hintergrund AWT, Swing, JavaFX & SWT 2
O Zweifarbiger Hintergrund in einer TableCell? AWT, Swing, JavaFX & SWT 4
R Bilder als Hintergrund für Swing - Komponenten AWT, Swing, JavaFX & SWT 3
R HTML Hintergrund für Swing - Componenten AWT, Swing, JavaFX & SWT 2
0 JTable - Hintergrund Tabellen statt Grau AWT, Swing, JavaFX & SWT 5
V JButton in Hintergrund zwingen? AWT, Swing, JavaFX & SWT 14
G Hintergrund AWT, Swing, JavaFX & SWT 5
M Hintergrund Transparent machen? AWT, Swing, JavaFX & SWT 3
F Farbe für den Hintergrund eine BorderLayout-Teils AWT, Swing, JavaFX & SWT 5
C Fenster rücken beim Drucken in den Hintergrund AWT, Swing, JavaFX & SWT 6
B Programm im Hintergrund - JFrame AWT, Swing, JavaFX & SWT 5
D Robot: Screenshot vom Desktop Hintergrund möglich ? AWT, Swing, JavaFX & SWT 3
F JDialog im Hintergrund lassen AWT, Swing, JavaFX & SWT 2
G schwarzen hintergrund von png transparent machen AWT, Swing, JavaFX & SWT 2
J jlabels überlappen / vorder-hintergrund AWT, Swing, JavaFX & SWT 2
G hintergrund farbe vom flow layout ändern AWT, Swing, JavaFX & SWT 2
S Button im Hintergrund AWT, Swing, JavaFX & SWT 12
foobar JTable im Hintergrund drucken AWT, Swing, JavaFX & SWT 2
B Hintergrund eines JPanels AWT, Swing, JavaFX & SWT 16
M Bild als Hintergrund anzeigen? AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen

Neue Themen


Oben