JList nimmt keine Selektierung mehr an

Status
Nicht offen für weitere Antworten.

milanwb

Aktives Mitglied
Hallo,

ich habe heute mal an meinem Programm ein paar Look And Feels ausprobiert.
Hierzu habe ich NUR 1 Zeile Code hinzugefügt: (UIManger.setLook......) - nichts anderes verändert!

Jetzt hatte ich ein schönes Look And Feel gefunden (Liquid LaF) und musste leider fest stellen, dass meine JList plötzlich keine Selektierung mehr annahm.
Also dachte ich, das LaF wär beschädigt, habe die oben genannte Zeile wieder entfernt und stellte mit erstaunen fest:

"Deine JList funktioniert nicht mehr..."

Ich also den PC neugestartet und es geht immer noch nicht... Jetzt frag ich mich warum funktioniert der Code, der es eben noch getan hat nicht mehr?

Vielleicht hat ja schon jemand ein ähnliches Problem gehabt und kann mir aus meiner Krise helfen :)

Oder war mein Code nur so schlecht, dass es nur ein Zufall war, dass er einmal lief?
Dazu hier einmal den Code der wichtigsten Elemente:

Die Funktion, die die Selektierung setzt:

Code:
// Vorwissen:
// in der ArrayList<Object> selectedNicks sind alle Positionen, die anschließend in der Liste angezeigt werden sollen gespeichert

     int arr[] = new int[selectedNicks.size()]; // Anlegen des nötigen int Arrays
            for (int a=0; a < selectedNicks.size();a++) { // durchlaufen aller Positionen
                arr[a] = ( (Integer)selectedNicks.get(a) ).intValue(); // Speichern in der positions Variabel
            }

            nicklist.setSelectedIndices(arr); // Alle Selektierungen anzeigen

Mein CellRenderer:

Code:
public NicklistRenderer() {}
    
    public Component getListCellRendererComponent(JList jlist, Object value, int index, boolean sec, boolean foc) {
        
        UserList list = (UserList)value; // Das in die JList eingefügte Object
        
        //System.out.println("Mod von: " + list.getNick() + " = " + list.getMod());
        
        if (list.getMod() != null) {
            setIcon(list.getMod());
        } 
        
        setFont(new Font("Arial", 1, 12));
        this.setText(list.getNick());
        
        if (list.getStatus() == 0)  {
            this.setForeground(Color.BLACK);
        } else if (list.getStatus() == 5) {
            this.setForeground(Color.GREEN);
        } else if (list.getStatus() >= 10) {
            this.setForeground(Color.RED);
        }
        
        return this;
    }


Ich hoffe jemand kann mir helfen, weil es ist schon ein sehr komischer Effekt find ich!
Solltet ihr noch mehr Teile haben wollen so sagt einfach bescheid :)

Grüße

Michael
... in Hoffnung auf schnelle Hilfe :)
 
S

SlaterB

Gast
tja, wer entsprechende Kenntnisse hat kommt vielleicht mit deinem Code aus,
für allgemeine Bastler wie mich solltest du aber ein komplett lauffähiges Testprogramm schreiben,
main, JFrame, JList, < 50 Zeilen

dabei so kurz wie möglich, selbst der Ausschnitt den du da gepostet hast läßt sich noch stark vereinfachen,
wen interessieren unterschiedliche Farben?
als Elemente der JList möglichst Strings oder ähnlich einfaches verwenden,
2-3 vordefnierte Testelemente reichen,
keine großen eigenen Klassen/ Ladeoperationen/ gar Benutzereingaben
 

milanwb

Aktives Mitglied
Hi,


tja, wer entsprechende Kenntnisse hat kommt vielleicht mit deinem Code aus,
für allgemeine Bastler wie mich solltest du aber ein komplett lauffähiges Testprogramm schreiben,
main, JFrame, JList, < 50 Zeilen


hier das gewünschte Beispielprogramm:

Code:
package JListProb;

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

public class ListProblem {
    
    /** Creates a new instance of ListProblem */
    public ListProblem() {
        
        // Erstellen der nötigen Daten...
        
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
        Container c = f.getContentPane();
        c.setLayout(new BorderLayout());
        
        JList list = new JList();
        list.setPreferredSize(new Dimension(200,200));
        
        // Ab hier beginnt das Problem:
        
        
        /* Hiermit würde es funktionieren!
        
        Vector<String> daten = new Vector<String>();
        daten.add("Blaaa 1");
        daten.add("Blaaa 2");
        daten.add("Blaaa 3");
        
         */

        // Da ich aber einen eigenen Renderer verwende, muss es so sein:
        // Jetzt funktioniert keine Selektierung mehr.... (hat mal funktioniert)
        
        
        list.setCellRenderer(new NicklistRenderer());
        Vector<UserList> daten = new Vector<UserList>();
        daten.add(new UserList("Nummer 1", 0));
        daten.add(new UserList("Nummer 2", 5));
        daten.add(new UserList("Nummer 3", 10));

        
        
        // Einsetzen und Anzeigen des Fensters
        
        list.setListData(daten);
        
        c.add(list, BorderLayout.CENTER);
        
        f.pack();
        f.setVisible(true);
        
        
    }
    
    public static void main (String arg[]) {
        new ListProblem();
    }
}



class NicklistRenderer extends JLabel implements ListCellRenderer {
    
    public NicklistRenderer() {}
    
    public Component getListCellRendererComponent(JList jlist, Object value, int index, boolean sec, boolean foc) {
        
        UserList list = (UserList)value;
           
        setFont(new Font("Arial", 1, 12));
        this.setText(list.getNick());
        
        if (list.getStatus() == 0)  {
            this.setForeground(Color.BLACK);
        } else if (list.getStatus() == 5) {
            this.setForeground(Color.GREEN);
        } else if (list.getStatus() >= 10) {
            this.setForeground(Color.RED);
        }
        
        return this;
    }
    
}

class UserList {
    
    int status;
    String nick;    
    
    public UserList(String nick, int status) {
        this.status = status;
        this.nick = nick;
    }
    
    public String getNick() {
        return nick;
    }
    
    public int getStatus() {
        return status;
    }
    
}

Note: Ich verwende Java 1.5_10



wen interessieren unterschiedliche Farben?
als Elemente der JList möglichst Strings oder ähnlich einfaches verwenden,

Ich brauche leider die Farben und die Icons (habe diese jedoch jetzt mal im code gelöscht!) - Und genau dazu würde man diese CellRenderer verwenden wurde mir gesagt...

Nur wie gesagt das hat auch mal funktioniert, nur jetzt iwie nicht mehr... Die Frage ist warum? Muss ich vielleicht im CellRenderer etwas verändern?

Danke für eure Hilfe!

Grüße

Michael
 

Leroy42

Top Contributor
Allgemeine Vorgehensweise bei derartigen Problemen.

1. Kopier deine Anwendung (Java-Files)
2. Reduzier' sie dermaßen, Schritt für Schritt, bis das
Problem nicht mehr auftritt, oder das Programm klein
genug zum Posten ist.

Und SlaterB hat Recht: Wen interessieren die Farben.

Nimm also erst mal den Code raus, solange er dein
eigentliches Problem nicht tangiert.
 
S

SlaterB

Gast
tja, ich verstehe so ein Problem einfach nicht ;)
erstmal hast du immer noch diese dumme UserListe,
kann man kinderleicht in drei Strings 1/2/3 ersetzen und genau den gleichen Effekt erzielen (statt nach Status direkt nach String unterscheiden)

aber die Farbe hat ja auch nix mit der Selektion zu tun, also löschen und alles schwarz,

so dann ist dein Problem irgendwas mit Selektion?
tja, dein Renderer enthält ja gar nix, was mit Selektion zu tun hat,
also einfach mal in google eintippen, in der API landen:
http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/ListCellRenderer.html
und das dortige Beispiel ganz oben klappt sofort ohne Probleme

Code:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;

public class ListProblem {

	public ListProblem() {
		JList list = new JList();
		list.setPreferredSize(new Dimension(200, 200));
		list.setCellRenderer(new NicklistRenderer());

		Vector daten = new Vector();
		daten.add("1");
		daten.add("2");
		daten.add("3");
		list.setListData(daten);

		JFrame f = new JFrame();
		f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
		f.getContentPane().add(list, BorderLayout.CENTER);
		f.pack();
		f.setVisible(true);
	}

	public static void main(String arg[]) {
		new ListProblem();
	}
}

class NicklistRenderer extends JLabel implements ListCellRenderer {

	public NicklistRenderer() {
		setOpaque(true);
	}

	public Component getListCellRendererComponent(
		JList jlist, Object value, int index, boolean sec, boolean foc) {

		String item = (String) value;

		setFont(new Font("Arial", 1, 12));
		this.setText(item);
		setBackground(sec ? Color.red : Color.white);
		setForeground(sec ? Color.white : Color.black);

		return this;
	}
}

und was ist nun dein Problem?
 

milanwb

Aktives Mitglied
Hallo,

Ich habe meinen Code mal an deinen angepasst! Hat super geklappt warum war ich nur so dumm und hab das setBackground übersehen...
Nur daran hat ich gar nicht gedacht, weil es ja bevor ich mit den LaF's rumgespielt habe alles geklappt hat... Es wird wohl ein Rätzel bleiben...

----

Zum Thema UserList:

Das habe ich wegen diesem Thread gemacht: www.java-forum.org/de/viewtopic.php?t=2232&highlight=cellrenderer+jlist

Also meinst du es ist besser folgendes zu machen:

Code:
// Im Aufbau:

Vector<String> daten = new Vector<String>();
daten.add("Anzeige1#5#icontyp");
daten.add("Anzeige2#0#icontyp");
daten.add("Anzeige3#10#icontyp");

list.setListData(daten);

// Im Renderer:

Icon typ1, typ2;

public NicklistRenderer() {
setOpaque(true);
typ1 = new ImageIcon("...");
typ2 = new ImageIcon("...");
}


public Component getListCellRendererComponent(...) {


String split[] = value.toString().split("#");

// Text

setText(split[0]);

// Farbe

int status = Integer.parseInt(split[1]);

if (status == 0) {
setForeground(Color.BLACK);
} else if (status > 10) {
setForeground(Color.RED);
} else if (status == 5) {
setForeground(Color.BLUE)

// Icon

if (split[2].equals("type1")) {
setIcon(typ1);
}

setBackground(...);


}

Vielen Dank für deine Hilfe! Hast mir sehr geholfen :)


EDIT:

P.S.: Hatte das mit den Farben eben falsch verstanden - ich dachte ich sollte keine Farben in meinem fertigen Programm verwenden... - hatte das gar nicht auf das Beispielprog bezogen!
 
S

SlaterB

Gast
sowohl bei Farben als auch bei den Daten ging es mir nur um das Testprogramm,
Fehlerquellen analysieren, herausstellen usw.,

im fertigen Programm kann ich dir nur empfehlen, das Vorgehen mit der UserListe weiter zu verfolgen,
sehr löblich,
nur im Zusammenhang mit diesem Problem verwirrender Ballast ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JList, einzelne Strings hinzufügen AWT, Swing, JavaFX & SWT 9
B Jlist füllen AWT, Swing, JavaFX & SWT 4
H JList.setEnabled(false) - Text soll nicht grau sein AWT, Swing, JavaFX & SWT 2
BananenBrötchen Swing Arraylist in jList anzeigen AWT, Swing, JavaFX & SWT 6
J Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 6
A Swing JList zu JTree AWT, Swing, JavaFX & SWT 11
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
cezary Choice, JComboBox oder JList AWT, Swing, JavaFX & SWT 5
J JList scrollen AWT, Swing, JavaFX & SWT 3
Neumi5694 Swing JList - Klick abfangen AWT, Swing, JavaFX & SWT 3
G Swing Swing Binding JList funktioniert nicht AWT, Swing, JavaFX & SWT 5
M Swing JList Auswahl-GUI-Konzept AWT, Swing, JavaFX & SWT 9
C JList: Bestimmte Objekte ausschließen AWT, Swing, JavaFX & SWT 1
F JList aktualisiert nicht AWT, Swing, JavaFX & SWT 24
F JList auffüllen aus Array von Instanzen AWT, Swing, JavaFX & SWT 4
F Event wenn Maus eine JList verlässt AWT, Swing, JavaFX & SWT 13
F JList bei Windowbuilder AWT, Swing, JavaFX & SWT 8
F JList zeigt keine Einträge mehr AWT, Swing, JavaFX & SWT 1
P JList erstellen AWT, Swing, JavaFX & SWT 4
G DefaultListModel für JList AWT, Swing, JavaFX & SWT 2
P Einer JList mit eigenem ListModel einen Eintrag hinzfügen AWT, Swing, JavaFX & SWT 5
P Übergeben von ListModel an nichtparametrisierte JList AWT, Swing, JavaFX & SWT 8
M Ein Element in mehreren JList selektieren AWT, Swing, JavaFX & SWT 5
J Swing Probleme mit ListSelectionListener(), Inhalte der JList werden gelöscht? AWT, Swing, JavaFX & SWT 6
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
Nabbit Über JList kein JPopupMenu AWT, Swing, JavaFX & SWT 2
O Swing JList beim Klicken in der GUI erstellen AWT, Swing, JavaFX & SWT 6
C Swing JList zeigt keine neuen Einträge an AWT, Swing, JavaFX & SWT 1
B Swing Auf JList-Elemente aus einer anderen Klasse zugreifen AWT, Swing, JavaFX & SWT 1
T Generische Klasse in JList über DefaultListModel AWT, Swing, JavaFX & SWT 1
T Swing WindowBuilder: JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
C Button Text in JList neue Zeile AWT, Swing, JavaFX & SWT 6
C Hilfe bei JSpinner und JList AWT, Swing, JavaFX & SWT 1
D Swing ArrayList in Jlist/ List oder Array in JList/List AWT, Swing, JavaFX & SWT 5
S JList ist leer, aber DefaultListModel hat die Daten? AWT, Swing, JavaFX & SWT 9
M JList wird angezeigt, JTable (DefaultTableModel) nicht AWT, Swing, JavaFX & SWT 7
H Swing JList/JTable mit JButton, JTextField, Image, JComboBox und JLable AWT, Swing, JavaFX & SWT 2
D Swing Jlist Größe während der Laufzeit verändern. AWT, Swing, JavaFX & SWT 11
Q JList Update Problem AWT, Swing, JavaFX & SWT 1
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
N AWT Markierte Zeile jList aus mySQL DB löschen AWT, Swing, JavaFX & SWT 2
S JList repaint AWT, Swing, JavaFX & SWT 1
F Swing JTextField in JList (Funktion beibehalten) AWT, Swing, JavaFX & SWT 2
H JList AWT, Swing, JavaFX & SWT 5
B Swing Bild von Webseite herunterladen, diese dann in JList anzeigen. AWT, Swing, JavaFX & SWT 1
B Swing Dynamische JList mit Bildern AWT, Swing, JavaFX & SWT 4
D JList&JButton erst nach Resize des JFRame sichtbar AWT, Swing, JavaFX & SWT 2
S JList Index finden AWT, Swing, JavaFX & SWT 6
3 Swing JList-Inhalt als verschlüsselte Datei schreiben und lesen AWT, Swing, JavaFX & SWT 1
N JComponenten in JList oder doch anders? AWT, Swing, JavaFX & SWT 0
S Swing JList, ArrayList + DefaultModel AWT, Swing, JavaFX & SWT 5
B Tabelleneinträge in JList anzeigen AWT, Swing, JavaFX & SWT 5
P JList/JScroolPane Text verschieben und text wrappen AWT, Swing, JavaFX & SWT 3
D Swing JList keine Selektionsänderung bei "dragged-Maus" AWT, Swing, JavaFX & SWT 4
M JList Model filtern AWT, Swing, JavaFX & SWT 4
K Swing JList - Element richtig hinzufügen AWT, Swing, JavaFX & SWT 4
T Swing Elemente der JList überlappend darstellen AWT, Swing, JavaFX & SWT 5
P Swing JList mit Objekten - Name anzeigen AWT, Swing, JavaFX & SWT 5
Ollek JList - neuer Eintrag in ArrayList dadurch keine Anzeige der Objekte AWT, Swing, JavaFX & SWT 18
K Mehrfachselektierungen in einer JList AWT, Swing, JavaFX & SWT 6
L Swing Component alignment innerhalb einer JList AWT, Swing, JavaFX & SWT 3
M Swing JList Listener AWT, Swing, JavaFX & SWT 20
M Accelerator zu JMenuItem des JPopupMenu einer JList AWT, Swing, JavaFX & SWT 2
S Swing JList wird nicht angezeigt AWT, Swing, JavaFX & SWT 3
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
E selektierter Datensatz in JList als String Datentyp AWT, Swing, JavaFX & SWT 23
E selektiertes Element aus JList zurückgeben AWT, Swing, JavaFX & SWT 7
E JList /DefaultListModel mit Datenbank verbinden AWT, Swing, JavaFX & SWT 10
L SQL & Jtable o. JList AWT, Swing, JavaFX & SWT 5
K Swing JList und veränderte CellRenderer AWT, Swing, JavaFX & SWT 8
B JList + ListCellRenderer AWT, Swing, JavaFX & SWT 5
B JList -> Disabled AWT, Swing, JavaFX & SWT 6
J JList, Anzeige aktualisieren AWT, Swing, JavaFX & SWT 7
I Jlist isselectionEmpty AWT, Swing, JavaFX & SWT 4
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
R Swing unbegrenzte Anzahl vonEinträgen in JList AWT, Swing, JavaFX & SWT 2
MiMa Dateien aus Ordner in einer JList Ausgeben AWT, Swing, JavaFX & SWT 32
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
M JList mit 2-zeiligen Objekten füllen AWT, Swing, JavaFX & SWT 7
S JList mit Einträgen versehen schlägt fehl AWT, Swing, JavaFX & SWT 4
F Swing ArrayList in JList anzeigen und Objekte auswählen AWT, Swing, JavaFX & SWT 2
B JList zeigt Elemente nicht an AWT, Swing, JavaFX & SWT 3
S Fragen zu JList AWT, Swing, JavaFX & SWT 3
B Aktualisierung einer JList AWT, Swing, JavaFX & SWT 5
W JList valueChanges weiterleiten? AWT, Swing, JavaFX & SWT 14
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
E Jlist nur mit Klasse? AWT, Swing, JavaFX & SWT 5
D Swing JList <-> AdapterModel <-> Model AWT, Swing, JavaFX & SWT 4
1 JList - Elemente mit rechter Maustaste wählen AWT, Swing, JavaFX & SWT 6
M JList mit DefaultListModel und listener AWT, Swing, JavaFX & SWT 4
B JList nach dem Rendern sortieren AWT, Swing, JavaFX & SWT 3
T Wie ist das "Lookup-Verhalten" von JList, JCombobox änderbar? AWT, Swing, JavaFX & SWT 4
D JList items voneinander trennen AWT, Swing, JavaFX & SWT 10
E Keine Ausgabe von JList bei drücken von Button auf die Konsole AWT, Swing, JavaFX & SWT 7
M gleiches Element in JList mehrmals hintereinander auswählen AWT, Swing, JavaFX & SWT 6
T JList und Objekte AWT, Swing, JavaFX & SWT 7
M Swing JList Item in andere JList während Ausführung AWT, Swing, JavaFX & SWT 4
V JList filtern AWT, Swing, JavaFX & SWT 6
GianaSisters jList nur einmal ein Element anklicken AWT, Swing, JavaFX & SWT 3
TheWhiteShadow JList-Inhalt nach Änderung weg AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen


Oben