icon für eine JList zelle setzen

Status
Nicht offen für weitere Antworten.

biker126

Bekanntes Mitglied
halllöchen,

hab ganz brav die suchfunktion gefunden und diesen thread hier gefunden:
http://www.java-forum.org/de/forums/viewtopic.php?t=2232

allerdings versteh ich den code ned ganz und krieg dementsprechend fehler (nullpointer exception).

hier mal mein code:

Code:
package fileNameGenerator;
import javax.swing.*;
//import java.awt.Font;
import java.awt.*;

public class MyListCellRenderer extends JCheckBox implements ListCellRenderer{ 
	public Component getListCellRendererComponent(JList list, 
				  Object value, int index, boolean isSelected, boolean cellHasFocus) 
	{ 
		   //je nach Selektion die Farbe setzen 
	  setBackground(isSelected ? list.getSelectionBackground() : list.getBackground()); 
	  setForeground(isSelected ? list.getSelectionForeground() : list.getForeground()); 
	  try{ 
		myFile obj = new myFile((File)value); <-- dadurch wird die excpetion wohl "verursacht"   //MyObjekt ist der Container für einen User in Deinem Fall 
		setText(obj.getText());              //der Text der in der Liste angezeigt werden soll 
		Icon i = obj.getIcon();             //das zu setzende Icon... 
		this.setIcon(i);                //...wird hier gesetzt 
	  } 
	  catch(Exception ex){ 
		ex.printStackTrace(); 
	  } 
	  setFont(list.getFont()); 
	  setBorder(UIManager.getBorder("List.focusCellHighlightBorder")); 

	  return this; 
	} 
}

wie man sieht bis auf das "myFile" ziemlich gleich wie der code vom anderen topic ;).

hier meine "myFile" klasse:
Code:
package fileNameGenerator;
import javax.swing.*;
//import java.awt.Font;
import java.awt.*;
import java.io.*;
import javax.swing.filechooser.FileSystemView;
public class myFile
{
    private Icon icon = null; 
    private String text = ""; 
    private FileSystemView system;

    public myFile (File f)
    {
        text = f.getName();
        icon = system.getSystemIcon(f); <-- hier ist mein nullpointer-exception
    }
    public void setIcon(Icon aIcon)
    {
        icon = aIcon; 
    } 
    public Icon getIcon()
    {
        return icon; 
    } 
    public void setText(String aText)
    { 
        text = aText; 
    } 
    public String getText()
    {
        return text; 
    }     
    public String toString()
    {
        return text; 
    }
}

in der JList haben ich daten vom klassentyp File (wie man am code wohl auch merkt ;)). ich weiss aber nicht, ob ich den renderer ganz verstehe, bzw. seine argumente. das erste ist wohl die list um dies geht. das 2. dann das jeweilige listen-elemente (bei mir file-objekte), das 3. argument der index des entsprechenden objekts und danach werte ob's selektiert bzw. den focus hat, richtig so?
der cellrenderer selber verändert aber nix an den typen meiner daten oder? also aus meinen file-objekten in der liste werden keine myFile - objekte? das myFile brauch ich ja eigentlich nur um ein icon auszulesen...

hat jmd ne idee wodurch der fehler entsteht? wie gesagt, ich weiss nicht ob ich überhaupt alles richtig verstanden habe. aber könnte es sein, dass bei "getSystemIcon" n mist (bzw. null) rauskommt wenn das file n directory ist? aber dafür sollte es ja eigentlich auch n icon geben... sonst wärs n bisl blöd... *g*
 
B

Beni

Gast
system ist wohl null, denn du setzt diese Variable gar nie.

Eigentlich musst du die einfach noch setzen, aber *angst mach* : Du brauchst myFile gar nicht (wie du schon selbst bemerkt hast).
Einfacher (und schneller) ist es, wenn du eine Instanz der FileSystemView als Instanzvariable im Renderer speicherst, und immer diese benutzt.
 

biker126

Bekanntes Mitglied
du meinst im renderer da wo das icon gesetzt wird das SystemFileView verwenden und da wo der text gesetzt wird kann ich ja direkt ein .getName() (von der File klasse) machen?

aber auf was soll ich anfangs die instanz der SystemFileView klasse setzen? ich mein, klar is dir bei mir am anfang null, aber eigentlich wird doch auf alle fälle ein icon zugewiesen und dann is sie nicht mehr null oder?
 
B

Beni

Gast
du meinst im renderer da wo das icon gesetzt wird das SystemFileView verwenden und da wo der text gesetzt wird kann ich ja direkt ein .getName() (von der File klasse) machen?
Genau das meine ich.

P.S. statt .getName kannst du auch FileSystemView.getSystemDisplayName(File f) nehmen.

Zum null:
Code:
package fileNameGenerator;
import javax.swing.*;
//import java.awt.Font;
import java.awt.*;
import java.io.*;
import javax.swing.filechooser.FileSystemView;
public class myFile
{
    private Icon icon = null;
    private String text = "";
    private FileSystemView system;

    public myFile (File f)
    {
        text = f.getName();

         // hier ist system null. Denn system wird niergends gesetzt. 
         // eine sehr schlechte und langsame Möglichkeit wäre:
           // icon = FileSystemView.getFileSystemView().getSystemIcon(f);
         // aber das getFileSystemView benötigt viel Ressourcen.

        icon = system.getSystemIcon(f); <-- hier ist mein nullpointer-exception

    }
    public void setIcon(Icon aIcon)
    {
        icon = aIcon;
    }
    public Icon getIcon()
    {
        return icon;
    }
    public void setText(String aText)
    {
        text = aText;
    }
    public String getText()
    {
        return text;
    }     
    public String toString()
    {
        return text;
    }
}

Edit: Eine FileSystemView bekommst du über getFileSystemView.
 

biker126

Bekanntes Mitglied
ich müsste im renderer also dann folgendes machen:
Code:
icon = FileSystemView.getFileSystemView().getSystemIcon((File)obj);

oder?

aber was wäre denn eine schnellere möglichkeit? aus deinem text schliess ich mal, dass es ne code-mässig kompliziertere wäre... würd mich noch interessieren wie die aussieht wenns dir nix ausmacht die hier hinzutippen... ;). sonst nehm ich halt das .getFileSystemView().

thx schonmal!
 
B

Beni

Gast
Nein, ist eine zusätzliche Zeile:
Code:
package fileNameGenerator;
import javax.swing.*;
//import java.awt.Font;
import java.awt.*;

public class MyListCellRenderer extends JCheckBox implements ListCellRenderer{
   private FileSystemView system = FileSystemView.getFileSystemView(); // <<<<< hier eine neue Zeile

   public Component getListCellRendererComponent(JList list,
              Object value, int index, boolean isSelected, boolean cellHasFocus)
   {
         //je nach Selektion die Farbe setzen
     setBackground(isSelected ? list.getSelectionBackground() : list.getBackground());
     setForeground(isSelected ? list.getSelectionForeground() : list.getForeground());
     try{
      myFile obj = new myFile((File)value); <-- dadurch wird die excpetion wohl "verursacht"   //MyObjekt ist der Container für einen User in Deinem Fall
      setText(obj.getText());              //der Text der in der Liste angezeigt werden soll
      Icon i = obj.getIcon();             //das zu setzende Icon...

      this.setIcon( system.getSystemIcon((File)obj );   // <<<<<<< die hier etwas abändern.
     }
     catch(Exception ex){
      ex.printStackTrace();
     }
     setFont(list.getFont());
     setBorder(UIManager.getBorder("List.focusCellHighlightBorder"));

     return this;
   }
}
 
B

Beni

Gast
Hier:
Code:
public class MyListCellRenderer extends JCheckBox implements ListCellRenderer{
   private FileSystemView system = FileSystemView.getFileSystemView(); // <<<<< hier eine neue Zeile
 

biker126

Bekanntes Mitglied
ooohhh, sry :). naja war schon früh am morgen bzw. spät am abend... *g*.

aber jetzt machst es ja doch mit getFileSystemView(). naja, is ja eigentlich auch egal. hauptsache es geht :D.
 
B

Beni

Gast
Aber ich mach es nur einmal.
Im Gegensatz zu den 100 Aufrufen der Methode !!!
 

biker126

Bekanntes Mitglied
ah du meinst mit dem "myFile" würde das ja für jedes einzelne file aufgerufen werden... :).

btw. ich krieg folgende errors:

FileSystemView.getShellFolder: f=C:\hiberfil.sys

java.io.FileNotFoundException
at sun.awt.shell.ShellFolder.getShellFolder(ShellFolder.java:234)

java.lang.NullPointerException
at javax.swing.filechooser.FileSystemView.getSystemIcon(FileSystemView.java:183)

und die gleich 2mal... *g*. die c:\hiberfil.sys gibts bei mir gar ned bzw. wird mit "datei->suchen" nicht gefunden (ja, versteckte anzeigt). in der JList zeigt er die aber an. sowie noch eine io.sys, pagefile.sys und noch paar andere (wohl windows) files. sind das irgendwie ganz super-duper versteckte systemdateien die man nichtmal mit "versteckte dateien anzeigen" zu gesicht kriegt??? und warum findet der die hiberfil.sys dann nicht, wenn er die anderen findet...??
 
B

Beni

Gast
juhu, Windoof :D

Diese Files sollten mit "File.exists()" false zurückgeben, so kannst du sie rausfiltern.
 

biker126

Bekanntes Mitglied
könnte ich da was mit: "listFiles(FileFilter filter)" machen? ich hab's erst so probiert, dass ich mir einfachmal alle files lade und dann die aussortieren in einem vektor speicher. allerdings hab ich mir so grad mein ganzes file puttgemacht... (oke, hab noch paar andere sachen geändert). ich mein, ich könnts nochmal probieren, eigentlich hätte meine idee eh funktionieren sollen... ???:L

aber ich denk mal, wenn man direkt mit dem filefilter nur die "existierenden" files laden könnte, wärs sicher einfacher. das prob is nur, dass ich nicht weiss wie man so nen filefilter schreibt... :(

das is ja n interface mit der funktion "accept(File pathname)". die müsste ich dann implementieren oder? könnte ich da dann ein "pathname.exists()" reinpacken und je nach dem gibt exists bzw. dann accept true oder false zurück? oder wie würde man das lösen??

ps. bitte auf die letzten 3 fragen umbedingt eingehen ;)
 
B

Beni

Gast
gutidee.gif


Die müsstest du implementieren (neue Klasse herstellen, implements FileFilter, etc...)
Das würde dann true oder false zurückgeben.
Ich finds eine gute Idee, sie müsste auch funktionieren.

Probier sie aus, und sag uns, obs funzt.

Gruss Beni
 

biker126

Bekanntes Mitglied
hat wunderbar geklappt :).

ich muss schon sagen: das forum hier bzw. die leute hier sind echt klasse :). ohne euch könnt ich das nie! :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Windowbuilder - Icon für Button einbinden AWT, Swing, JavaFX & SWT 2
Burny91 Swing Swatches vom JColorChooser als Icon für JButton benutzen AWT, Swing, JavaFX & SWT 4
E Icon für Fenster AWT, Swing, JavaFX & SWT 5
S svg Icon für Button (Batik Problem?) AWT, Swing, JavaFX & SWT 3
N Icon für Button wird nicht gefunden AWT, Swing, JavaFX & SWT 11
B SWT Eigenes Icon für CheckboxTreeViewer AWT, Swing, JavaFX & SWT 3
P [JTree] Icon für Nodes und Leafs ändern bzw. löschen AWT, Swing, JavaFX & SWT 2
C Was is am besten für Icon? AWT, Swing, JavaFX & SWT 2
loadbrain Icon für JFrame mit Netbeans AWT, Swing, JavaFX & SWT 3
$ Layoutabhängige größe von JLabel für Icon abfragen AWT, Swing, JavaFX & SWT 2
G für showInputDialog kein eigenes Icon auswählen AWT, Swing, JavaFX & SWT 6
G Ikonli in Fat-Jar mit mehreren Icon-Packs einbinden AWT, Swing, JavaFX & SWT 5
I AWT java.awt.FileDialog - "coffee cup"-Icon lässt sich nicht ersetzen AWT, Swing, JavaFX & SWT 14
P Swing Icon einfügen wirft eine Fehlermeldung AWT, Swing, JavaFX & SWT 3
J JButton Icon hinzufügen AWT, Swing, JavaFX & SWT 5
U Swing JButton mit Icon AWT, Swing, JavaFX & SWT 7
N Swing Image aus Web laden und in Icon umwandeln AWT, Swing, JavaFX & SWT 4
krgewb Swing Icon von Button AWT, Swing, JavaFX & SWT 12
Shallty JavaFX MenuItem (Info) Icon ändern AWT, Swing, JavaFX & SWT 7
Legi Swing JButton Icon verschiebt sich AWT, Swing, JavaFX & SWT 2
U AWT Smoother Icon AWT, Swing, JavaFX & SWT 2
D Kein Icon beim JTabbedPane AWT, Swing, JavaFX & SWT 1
S JavaFX TreeItem: Icon am Ende eines Eintrags anhängen AWT, Swing, JavaFX & SWT 2
D Icon in Menuitem einfügen AWT, Swing, JavaFX & SWT 8
C Icon in der Spaltenüberschrift AWT, Swing, JavaFX & SWT 1
C SWT Treeview mit Bilder im Label verändert Expanded Icon AWT, Swing, JavaFX & SWT 1
Tom299 JavaFX TreeView Expanded-Icon ändern AWT, Swing, JavaFX & SWT 0
E Swing Error icon in der TextArea AWT, Swing, JavaFX & SWT 1
D JButton - Nur Icon anzeigen / transparenter Hintergrund AWT, Swing, JavaFX & SWT 2
M label mit icon verschieben. AWT, Swing, JavaFX & SWT 1
M JavaFX wie kann mann sein frame mit einem Icon fersehen? AWT, Swing, JavaFX & SWT 2
C JavaFX Application -Icon wird falsch dargestellt AWT, Swing, JavaFX & SWT 7
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
D JavaFX - MenuItem mit Icon AWT, Swing, JavaFX & SWT 1
T JFrame Icon unter Linux/Ubuntu AWT, Swing, JavaFX & SWT 11
A Swing JColorChooser's Icon will nicht getauscht werden. AWT, Swing, JavaFX & SWT 10
B JAVAFX icon in ComboBox einfügen AWT, Swing, JavaFX & SWT 5
H Javafx - Menuitem - Icon AWT, Swing, JavaFX & SWT 4
J JComboBox Dropdown Icon AWT, Swing, JavaFX & SWT 2
vodkaz JButtonz Icon&Background AWT, Swing, JavaFX & SWT 3
B Icon AWT, Swing, JavaFX & SWT 5
E Swing JFrame Icon AWT, Swing, JavaFX & SWT 3
F icon aus exe auslesen mithilfe des JFilechooser ? AWT, Swing, JavaFX & SWT 4
F DefaultTreeCellEditor - Fragen zur Groesse und zum Icon beim Editieren AWT, Swing, JavaFX & SWT 4
H Label mit Icon positionieren AWT, Swing, JavaFX & SWT 14
H Image Icon ersetzen AWT, Swing, JavaFX & SWT 8
J Icon vor Button AWT, Swing, JavaFX & SWT 7
M Swing JButton-Konstruktor Icon-Parameter (Verständnisfrage) AWT, Swing, JavaFX & SWT 7
TheWhiteShadow Swing Problem mit Icon-Menü-Leiste AWT, Swing, JavaFX & SWT 5
S Würfelanimation icon updaten AWT, Swing, JavaFX & SWT 8
S JButton -> Text über Icon AWT, Swing, JavaFX & SWT 4
M Swing DoubleBuffer mit Icon AWT, Swing, JavaFX & SWT 3
TiME-SPLiNTER JLabel mit Icon & JFrame Resize AWT, Swing, JavaFX & SWT 5
V Panel/Icon aktualisieren AWT, Swing, JavaFX & SWT 10
S 2D-Grafik Icon in Image (System Icons) AWT, Swing, JavaFX & SWT 2
X Icon in JTable abbilden AWT, Swing, JavaFX & SWT 10
M Icon wird bei externen Jar nicht angezeigt AWT, Swing, JavaFX & SWT 2
L toggel icon in jtable AWT, Swing, JavaFX & SWT 3
kodela Swing Icon in der Titelleiste "festnageln" AWT, Swing, JavaFX & SWT 6
G JLabel Icon Pfeilform AWT, Swing, JavaFX & SWT 14
S JCheckBoxMenuItem - Haekchen verschwindet bei Icon AWT, Swing, JavaFX & SWT 3
V Ein Image als Button (nicht mit JButton(Icon)) AWT, Swing, JavaFX & SWT 5
algorismi JInternalframe Icon AWT, Swing, JavaFX & SWT 14
M JCheckBox Icon anpassen AWT, Swing, JavaFX & SWT 2
M Prozess-Icon im Prozessmanager AWT, Swing, JavaFX & SWT 8
W Swing Button mit Icon AWT, Swing, JavaFX & SWT 3
C Swing JToggleButton und Icon AWT, Swing, JavaFX & SWT 2
S JTree - Knoten mit animiertem GIF/Icon AWT, Swing, JavaFX & SWT 5
S vector Icon AWT, Swing, JavaFX & SWT 3
C LayoutManager Icon Einfügen? AWT, Swing, JavaFX & SWT 6
K LookAndFeel JTabbedPane mit Icon und CloseButton AWT, Swing, JavaFX & SWT 2
badfish Swing ImageIcon auf JLabel, Fenster Maximieren verbieten und Icon oben links austauschen? AWT, Swing, JavaFX & SWT 5
F Problem beim Positionieren von Icon und Text in Button AWT, Swing, JavaFX & SWT 2
R JTable mit Column die Icon und Integer enthält? AWT, Swing, JavaFX & SWT 3
T Icon von Frame ändern - Applet AWT, Swing, JavaFX & SWT 2
J Icon einer JCheckBox AWT, Swing, JavaFX & SWT 6
D Swing Anwenungs Icon AWT, Swing, JavaFX & SWT 8
A Swing JTable Icon nur in einer Zelle AWT, Swing, JavaFX & SWT 2
R JTable Header - will links kleines icon hinzufuegen..? AWT, Swing, JavaFX & SWT 6
J Swing JToolBar Button mit Icon AWT, Swing, JavaFX & SWT 4
V [Swing] Overlay Icon AWT, Swing, JavaFX & SWT 5
K Schachbrett / Icon / JButton AWT, Swing, JavaFX & SWT 7
T Abbrechen-Icon entfernen AWT, Swing, JavaFX & SWT 4
S Buttons mit großen Icon AWT, Swing, JavaFX & SWT 7
klattiator Icon und Button zum Schließen in einem Tab AWT, Swing, JavaFX & SWT 3
G Sehr kleine JButtons mit Icon oder Beschriftung AWT, Swing, JavaFX & SWT 2
G Icon ans Ende einer JToolbar AWT, Swing, JavaFX & SWT 7
D Abfrageproblem bei JMenu mit Icon AWT, Swing, JavaFX & SWT 2
K Icon auf JButton mit Wechsel der Farbe AWT, Swing, JavaFX & SWT 2
G Gap zwischen JButton-Rand und JButton-Icon verändern AWT, Swing, JavaFX & SWT 2
G JFrame Icon ändern AWT, Swing, JavaFX & SWT 5
G Icon und Text in JTable darstellen AWT, Swing, JavaFX & SWT 3
S Eclipse Icon Set AWT, Swing, JavaFX & SWT 6
G Icon in JTable AWT, Swing, JavaFX & SWT 9
S Jtree-Icon per Klick auf JBUTTON ändern AWT, Swing, JavaFX & SWT 3
A Icon,zentriert,Farbiger Text alles in einer Tabelle/Spalte ? AWT, Swing, JavaFX & SWT 4
L icon auf Label AWT, Swing, JavaFX & SWT 4
K Icon und Text auf JButton anordnen AWT, Swing, JavaFX & SWT 2
D Icon in MenuItem AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben