Also mit dem Array das hab ich auch schon versucht. Aber sowohl beim Array, als auch beim der Map muss ich ja dann immer mit neuen Labels arbeiten, oder?
Weil "new JLabel("Test")" erstellt mir ja ein neues Label. Ich habe aber die Labels schon alle fertig auf der Form samt ImageIcon, festgelegter Größe und Position.
Ich wollte nur mitteilen, dass es genau so funktionert, wie ich es mir vorgestellt habe.
Ich habe mir jetzt eine "interaktive Sternchenbewertung" wie bei Amazon gebastelt (mit 5 Sternen, keine halben). Beim Überfahren mit der Maus werden nur soviele Sterne angezeigt, wie die Maus fokussiert. Beim Verlassen der Sterne werden so viele Sterne angezeigt, wie ausgewählt wurden.
Und damit ich nicht bei allen 5 Label-ImageIcons den gleichen Code schreiben muss, hab ich das in zwei Methoden gepackt, die dann von den jeweiligen Label-MouseEvents aufgerufen werden.
Java:
// Map-Variable deklarierenprivateMap<String, javax.swing.JLabel> labels =newHashMap<String, javax.swing.JLabel>();// Konstruktor füllt MappublicNewRatingDialog(java.awt.Frame parent,boolean modal){super(parent, modal);initComponents();
labels.put("star1", star1);
labels.put("star2", star2);
labels.put("star3", star3);
labels.put("star4", star4);
labels.put("star5", star5);}// Sterne bei Mausfokus ändernprivatevoidstarEntered(int starFocused){for(int i=1; i<=5; i++){JLabel star = labels.get("star"+i);if(i <= starFocused){
star.setIcon(starFull);}else{
star.setIcon(starEmpty);}}}// beim Verlassen der Sterne die gewählte Anzahl anzeigenprivatevoidstarExited(){for(int i=1; i<=5; i++){JLabel star = labels.get("star"+i);if(i <= selectedStars){
star.setIcon(starFull);}else{
star.setIcon(starEmpty);}}}
Hi,
das mit dem Array-Zugriff war auch das was dir am Anfang gesagt wurde
evtl mal in der Insel das Array-Kapitel anschauen, und wenn du schon nach add-Methoden suchst am besten auch gleich mal in der Java-Api die ArrayList
du musst um das Array zu befüllen die Variablen nicht vorher erstellen, sondern wenn du z.b. 40 labels haben willst geht auch sowas:
Java:
ArrayList<JLabel> labels =newArrayList<JLabel>();for(int i =0; i <40; i++){
labels.add(newJLabel());}
Und wenn die dann halt mit dem Bild z.b. in ein Panel (hier einfach mal panel genannt) sollen (z.b. mit nem grid), dann halt so verwenden:
Java:
panel.setLayout(newGridLayout(10,4);for(int i =0; i < labels.size(); i++){
panel.add(labels.get(i));}
(Code ungetestet und einfach hier in die Tags getippt, sollte von der Struktur her aber so passen )
Gruß
Edit:
@Volvagia, doch da fliegt ne NPE ^^ aber nicht weil er in das Array nicht adden kann, sondern weil das Array vom typ Label bzw JLabel ist und die erben eine .add() von Container, daher kann er die Methode darauf aufrufen (lustiger Fehler ^^).
Die NPE fliegt dann logischerweise weil kein Label da ist