Wert in Dropdown Menü kursiv schrieben

Jhue89

Bekanntes Mitglied
Hallo Zusammen,

mal ne kurze Frage. Kann ich einen Wert in einem Dropdown Menü kursiv/ Fett schreiben?

sollte dann z.b. so aussehnen

1
2
3
4
5
6
7
8
9
10
 

Neumi5694

Top Contributor
Ja, das geht. Du kannst schlimmstenfalls einen eigenen Renderer schreiben, aber probier zuerst mal, html-Text zu verwenden
<html><i>MyText</i></html>
 

Jhue89

Bekanntes Mitglied
sieht fast gut aus. Aber wie mache ich das wenn ich eine Variable dazu nehmen möchte.

Java:
  for (int j= 1; j<10; j++)
          {
              list1.add("<html><i>MyText</i></html>" + j);
              
          }

Vielen lieben Dank!
 

Neumi5694

Top Contributor
Du meinst als Text?
Z.B. so:
Java:
          for (int i = 1; i <= 10; i++) {
            if (i == 5 || i == 10) {
              list.add(String.format("<html><i>%d</i></html>", i));//%d heißt: Hier wird ein Integer eingesetzt.
            } else {
              list.add(String.format("%d", i));
            }
          }
Persönlich würde ich aber nicht den Text in der Liste setzen, sondern nur den Text in der Anzeige. Man sollte nicht Daten und Formatierung vermischen.
Dafür muss man den Renderer überschreiben, der dann anhand der Daten oder anderer Bedingungen den Text formatiert.

Der DefaultRenderer liefert ein JLabel, schon richtig formatiert (Farbe usw.). Man muss dann nur gegebenenfalls den Text ersetzen und das veränderte Label als Ergebnis liefern.
 

mihe7

Top Contributor
Mal ein etwas komplexeres Beispiel mit einem Decorator, mit dem Du einzelnen Zeilen eine Schrift zuweisen kannst.

Java:
import java.awt.*;
import javax.swing.*;
import java.util.*;

public class Test {
import java.awt.*;
import javax.swing.*;
import java.util.*;

public class Test {

    static class FontRowDecorator<T> implements ListCellRenderer<T> {
        private final ListCellRenderer<T> renderer;
        private final Map<Integer, Font> rowFontMap = new HashMap<>();

        public FontRowDecorator(ListCellRenderer<T> renderer) {
            this.renderer = renderer;
        }

        public void set(int row, Font font) { rowFontMap.put(row, font); }

        @Override
        public Component getListCellRendererComponent(JList<? extends T> list,
                                                   T value,
                                                   int index,
                                                   boolean isSelected,
                                                   boolean cellHasFocus) {
            Component comp = renderer.getListCellRendererComponent(
                        list, value, index, isSelected, cellHasFocus);          
            
            Font rowFont = rowFontMap.get(index);
            if (rowFont != null) {
                comp.setFont(rowFont);
            }
            return comp;
        }
    }

    public void run() {
        String[] entries = {"1","2","3","4","5","6","7","8","9","10"};
        JComboBox<String> box = new JComboBox<>(entries);
        box.setFont(box.getFont().deriveFont(Font.PLAIN));

        FontRowDecorator<? super String> highlighted = new FontRowDecorator<>(box.getRenderer());
        highlighted.set(4, box.getFont().deriveFont(Font.ITALIC | Font.BOLD, 18f));
        highlighted.set(9, box.getFont().deriveFont(Font.ITALIC | Font.BOLD, 16f));
        box.setRenderer(highlighted);

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

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

Jhue89

Bekanntes Mitglied
Guten Morgen Zusammen,

so sollte es mal aussehen. Die Kursiv geschriebenen Texte sollen dem User zeigen das diese Variablen noch nicht verwendet wurden.
Wenn der Text ausgewählt wurde, soll er in der normalen Schriftart angezeigt werden.

Die Liste wurde in einer eigenen Klasse vordefiniert.

Java:
for (int j= 1; j<10; j++)
          {
              list1.add("MASTER_V" + j);
              
          }
Zusätzliche Variablen werden zur Laufzeit in die Liste geschrieben.

In den Tabellenfeldern ist noch einen AutoComplete Funkion hinterlegt. Wenn ich z.b das "M" in das Tabellenfeld eingebe werden mir nur die MASTER variablen angezeigt.

Wenn ich das mit der HTML schreibweise mache funktioniert die AutoComplete Funktion nicht mehr richtig, weil dort ja eigentlich
sowas drin steht "<html><i>MASTER_V%d</i></html>".
somit müsste "<" eingeben damit ich diese Variablen angezeigt bekomme.

Wäre ja auch zu einfach gewesen...

Ich probier die Variante von mihe7 mal aus.


Text kursiv.PNG
 

Neumi5694

Top Contributor
Ja, du kannst natürlich auch das Label umformatieren, das geht auch.
Auf jeden Fall wirst du wohl den Renderer ersetzen müssen.
 

Neumi5694

Top Contributor
Ich denke nicht, dass du dich mit dem Autocomplete bechäftigen musst, sofern du in der Liste unveränderte Texte stehen hast.
Es geht dir ja um die Listenansicht und ein Textfeld hat per Default keine solche. Entweder wird das Popup dafür manuell zusammengestellt, oder es ist Teil einer Kombobox. Und in letzterem Fall ersetzt du einfach den Listrenderer, so wie oben von mihe gezeigt.
 

mihe7

Top Contributor

Neumi5694

Top Contributor
@Neumi5694, wenn ich mich nicht verschaut habe, dann baut das AutocompleteBehaviour die JList und bietet die Möglichkeit an, den Renderer zu setzen (https://github.com/toby1984/swing-a...swing/autocomplete/AutoCompleteBehaviour.java)

@Jhue89, ich hab das grad alles nur ganz schnell überflogen, insofern kann es durchaus sein, dass ich daneben liege. Meine Gedanke war: Du hast eine AutocmpleteBehaviour-Instanz und rufst deren setListCellRenderer-Methode auf.
Ok, wieder was gelernt, da wr ich zu voreilig. Hatte das nicht mit einer UI in Verbindung gebracht. Dass sie dafür bereits ein Popup bereitstellen, hatte ich so nicht realisiert.
 

Jhue89

Bekanntes Mitglied
Sorry, aber jetzt komme ich nicht ganz mit.

den SetListCellRenderer habe ich. den Rufe ich hier in meinem Hauptprogramm auf. Die Oben genannte Methode habe ich ebenfalls im Hauptprogramm liegen.

Java:
         AutoCompleteList list = new AutoCompleteList();
      
      
       //Panel Center
       list1 = list.getAutoCompletelist(list1);
      
          
        textFieldTEST = newAutoCompleteField(list1);
        textFieldTEST.setPreferredSize(new Dimension(400,20));

Java:
   tblSchachtel1.getColumnModel().getColumn(1).setCellEditor((TableCellEditor) new DefaultCellEditor(textFieldTEST));


Java:
 public JTextField newAutoCompleteField(List<String> choices) {
       JTextField field = new JTextField();
       AutoCompleteBehaviour<String> autoComplete = new AutoCompleteBehaviour<String>();
       autoComplete.setCallback(new StringAutoCompleteCallBack(choices));
       autoComplete.setListCellRenderer(new DefaultListCellRenderer());     
      
       autoComplete.setInitialPopupSize(new Dimension(400,300));
       autoComplete.setVisibleRowCount(3);
      
      
       autoComplete.attachTo(field);     
       return  field;
   }
 

Neumi5694

Top Contributor
Hier:
Java:
autoComplete.setListCellRenderer(new DefaultListCellRenderer());
setzt du deinen eigenen ListCellrenderer anstatt des DefaultListCellRenderers ein.
Ziel ist es, eine Komponente (meistens Label) zu liefern, welche den Wert grafisch darstellt.

Der DefaultListCellrenderer verwendet dafür ein Label, das er für jeden Wert anpasst, anstatt jedesmal ein neues zu erzeugen.
Man kann sich auch das Label des DefaultListCellrenderers holen und verändern, damit erspart man sich die Auswertungen der anderen Parameter, der DefaultListCellListener macht das ja schon ordentlich.

Java:
  private class MyRenderer implements ListCellRenderer<XYZ> {

    private final DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

    @Override
    public Component getListCellRendererComponent(JList<? extends XYZ> list, XYZ value, int index, boolean isSelected, boolean cellHasFocus) {
      JLabel defaultLabel = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
      if (conditionForEditing) {
        //Label oder dessen Text verändern
      }
      return defaultLabel;
    }
  }
 

Jhue89

Bekanntes Mitglied
Ich hab den Teil jetzt mal reingenommen. InConditionForEditing muss ich dann ja die Zeilen reinschreiben die ich Kursiv haben möchte.

ich hab jetzt schon einiges Probiert aber so richtig funktioniert das noch nicht.

Mir ist noch nicht klar wie, ich an die die einzelenen Zeilen verändern kann.
 

Neumi5694

Top Contributor
Mir ist noch nicht klar wie, ich an die die einzelenen Zeilen verändern kann.
Der Renderer wird für jede Zeile aufgerufen. Du kriegst die Zeilennummer und den anzuzeigenden Wert. Anhand von denen oder wovon auch immer dir in den Sinn kommt entscheidest du dann, ob der Wert kursiv gehört oder nicht.

Hier ist ein einfaches Beispiel für einen Renderer, der abwechselnd kursiv+fett und "normal" schreibt.
Java:
  private class MyRenderer implements ListCellRenderer<String> {

    private final DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();
    boolean isCursive = false;

    @Override
    public Component getListCellRendererComponent(JList<? extends String> list, String value, int index, boolean isSelected, boolean cellHasFocus) {
      JLabel defaultLabel = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
      if (isCursive) {
        defaultLabel.setFont(defaultLabel.getFont().deriveFont(Font.ITALIC + Font.BOLD));
      } else {
        defaultLabel.setFont(defaultLabel.getFont().deriveFont(Font.PLAIN));
      }
      isCursive = !isCursive;
      return defaultLabel;
    }
  }
 

Jhue89

Bekanntes Mitglied
Ich glaube selbst ihr müsste das laute Klicken in meinem Kopf gehört haben.

Jetzt hab ich endlich kapiert wie das funktioniert. Ist ja eigentlich ganz einfach.

Ich Danke euch für eure Unterstützung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
A Negativ-Wert Java Basics - Anfänger-Themen 4
R finaler Wert in outerMethod von method in InnerMethodClass Java Basics - Anfänger-Themen 2
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Datum als Variable wert Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
Ostkreuz Wert von Arrays summieren Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
K Java gleicher Wert von Zahlen? Java Basics - Anfänger-Themen 5
M Erste Schritte While Schleife / Ausgabe von buchstabe & ASCII Wert Java Basics - Anfänger-Themen 4
M Spezifischen Wert einer Zeile aus .txt Datei entnehmen Java Basics - Anfänger-Themen 15
M Dialogbox solange abfragen, bis gültige Wert-Eingabe Java Basics - Anfänger-Themen 12
S Runden auf den niedrigsten Wert Java Basics - Anfänger-Themen 10
volcanos enum und switch (neu): falschen Wert mit IllegalArgumentException oder mit EnumConstantNotPresentException abfangen ? Java Basics - Anfänger-Themen 51
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
T Mit jedem Wert in der for-Schleife weiter arbeiten Java Basics - Anfänger-Themen 3
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 5
xaerez Threads Boolean Wert verändert sich nicht Java Basics - Anfänger-Themen 4
java-starter Erste Schritte Eingabe in Char wert umwandeln Java Basics - Anfänger-Themen 7
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
I Historisierung - Alter Wert, Neuer Wert... wie speichern? Java Basics - Anfänger-Themen 44
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
H Java verkettete Liste, Wert eines Index zurückgeben Java Basics - Anfänger-Themen 1
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
M Wie kann ich festlegen, dass ein Attribut maximal den Wert 0 erreicht, also nicht in den negativen Bereich fällt? Java Basics - Anfänger-Themen 4
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
U Ascii wert verschieben, wie möglich? Java Basics - Anfänger-Themen 3
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
D Einen boolischen Wert aus einer Methode in einer anderen Klasse aufrufen? Java Basics - Anfänger-Themen 11
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
J Wert zurückgeben über get Methode Java Basics - Anfänger-Themen 8
E Slider - Wert übergeben und überschreiben Java Basics - Anfänger-Themen 5
G Input/Output getText() gibt keinen Wert! Java Basics - Anfänger-Themen 13
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
I Validation, ob String ein Wert aus einem Enum enthält Java Basics - Anfänger-Themen 3
J Wert in einer json Datei ändern und speichern Java Basics - Anfänger-Themen 3
S Aus verschachtelter ArrayList auf einen Wert zugreifen Java Basics - Anfänger-Themen 4
H Den Wert einer rekursiven Funktion bestimmen Java Basics - Anfänger-Themen 5
T Feststellen, dass Wert zu groß; Caesar Chiffre Java Basics - Anfänger-Themen 3
J maximaler Wert eines Integers Java Basics - Anfänger-Themen 14
I Format Problem mit Wert - bekomme 0,10 anstatt 10,00 Java Basics - Anfänger-Themen 6
H Methode über String Wert aufrufen Java Basics - Anfänger-Themen 8
G Rekursive Methode liefert augenscheinlich keinen boolean-Wert zurück. Java Basics - Anfänger-Themen 4
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
NeoLexx Abfrage mit instanceof führt zu unerwarteten Wert Java Basics - Anfänger-Themen 9
B Map<String, FilterMeta, wie Wert bekommen? Java Basics - Anfänger-Themen 4
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V Boolean Wert nicht richtig erkannt Java Basics - Anfänger-Themen 4
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
1 Array nimmt falschen Wert auf! Java Basics - Anfänger-Themen 2
S Erste Schritte Button einen Wert zuweisen & diesen ausgeben Java Basics - Anfänger-Themen 2
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
V_Fynn03 Erste Schritte Einen Wert in ein TextField einfügen aus einer anderen Klasse Java Basics - Anfänger-Themen 3
J Wert zwischen JFrames übergeben Java Basics - Anfänger-Themen 2
J Umwandlung String zu ASCII-Wert und anders Java Basics - Anfänger-Themen 17
P Verzweigungen Wert zurück geben Java Basics - Anfänger-Themen 2
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
M Double Wert nach n abschneiden ohne zu runden Java Basics - Anfänger-Themen 1
F Boolean Methode Wert ausgeben. Java Basics - Anfänger-Themen 2
X Erste Schritte boolean wert ändert sich nicht? Java Basics - Anfänger-Themen 6
T Klassen Den Wert aus Array lesen lassen Java Basics - Anfänger-Themen 12
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
J Wie kann ich z.B. einem int-Wert einen String-Wert zuweisen? Java Basics - Anfänger-Themen 2
H Einfache Frage zur Punktnotation objektname.methode(wert) Java Basics - Anfänger-Themen 2
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
L Wert einer Webeseiteauslesen Java Basics - Anfänger-Themen 6
D Erste Schritte Wert im Array suchen Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
S Wert innerhalb eines anderen Wertes Java Basics - Anfänger-Themen 3
S Array doppelter Wert prüfen Java Basics - Anfänger-Themen 7
O Wert in einer Schleife unterschiedlich erhöhen Java Basics - Anfänger-Themen 2
B ArrayList besitzt einen Wert zu wenig Java Basics - Anfänger-Themen 16
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
F Java int-Wert wird resetet Java Basics - Anfänger-Themen 21
J Erste Schritte Wert aus JTextField zurückgeben Java Basics - Anfänger-Themen 6
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
J Wert bei Objekterzeugung verändern Java Basics - Anfänger-Themen 12
I bestimmten Wert eines Arrays Java Basics - Anfänger-Themen 23
D Erste Schritte Java speichert wert des Scanners nicht Java Basics - Anfänger-Themen 2
B Erste Schritte if Anweisung mit Wert Übernahme Java Basics - Anfänger-Themen 3
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
deatzi Wert aus anderer Klasse lesen Java Basics - Anfänger-Themen 7
D Compiler-Fehler Array an Methode übergeben und Wert zurückbekommen Java Basics - Anfänger-Themen 3
I Schleife fragt Wert ab bis 0 kommt (mit IO.java klasse) Java Basics - Anfänger-Themen 16
O String: Befehl und Wert erkennen. Java Basics - Anfänger-Themen 4
L Methoden Rekursion gibt alten Wert wieder Java Basics - Anfänger-Themen 37
S Wie erhöhe ich den Wert von mehren Integers auf einmal? Java Basics - Anfänger-Themen 5
J Wert eines Arrays einer Variable zuweisen, sobald der Wert eines anderen Arrays eintritt Java Basics - Anfänger-Themen 2
S Bestehendes Java Programm, einen festen Wert ändern Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben