ArrayList shuffle oder random?

Yuri-Li

Grünschnabel
Hey :)
Ich hab in einer ArrayList vier verschiedene Strings eingespeichert (sollen auch nicht mehr werden).
Diese habe ich mit shuffle dann vermischt. An sich klappt alles.
Ich moechte aber jetzt, dass er mir nicht alle Strings ausgibt, sondern nur eins von der Position 3 z.B oder der String auf der position 0.
Meine Frage waere nun, wie mach ich das? oder waere vielleicht random besser fuer sowas?

Code:
import java.util.ArrayList;
import java.util.Collections;

public test{
Random zufall = new Random();
ArrayList woerter = new ArrayList();
woerter.add("Hallo");
woerter.add("Du");
woerter.add("Da");
woerter.add("Blub");

System.out.println(woerter);
Collections.shuffle(woerter);
System.out.println(woerter);
}


lg
Yuri

Am ende ist geplant, dass ich vier string auf acht Labels verteilen kann (ein string auf jeweils zwei Labels) und das sie immer vermischt ausgegeben werden.
 
Java:
woerter.get(2);

Damit kriegst du den 3. String aus deine Liste. Naja du könntest theoretishc eine Randdamzahl erzeugen (muss aber kleiner sein als die Länge deiner Liste!) und dann dein Element rausholen. Da du deine Liste allerdings schon durchwürfeln lässt, ist das eher zusätzliche Arbeit.
 
okay, habs verstanden und es klappt auch :D
aber jetzt ne andere sache...

ich möchte jetzt, dass er mir bilder mischt, und diese dann auf Labels legt.
Ich weiß wie man es mit String hinbekommt, aber nicht mit Bilder...

Code:
import java.util.ArrayList;
import java.util.Collections;

public test{
Random zufall = new Random();
ArrayList woerter = new ArrayList();
woerter.add("Hallo");
woerter.add(new ImageIcon("images/54.jpg"));

Collections.shuffle(woerter);

JFrame fenster = new JFrame("Test");
fenster.setLayout(new BorderLayout());
        
JPanel hauptPanel = new JPanel();
hauptPanel.setBorder(new EtchedBorder());
 
JLabel 01 = new JLabel(String.format(" ", i, woerter.get(0)));
hauptPanel.add(01);  

JLabel 02 = new JLabel(?);
hauptPanel.add(02)

}

so, meine Frage wäre jetzt, was muss da rein, wo die Fragezeichen stehen?
Denn jetzt soll auf dem Label ein Bild erscheinen und kein String.

lg
Yuri
 
Hi,

also du musst dir die Konstruktoren von JLabel anschauen.
JLabel a = new JLabel();
Bei Netbeans ist da immer ein "Strg + Space" nach dem "new JLabel" hilfreich ^^

Einer dieser Konstruktoren lautet:
Code:
public JLabel(Icon image)
Creates a JLabel instance with the specified image. The label is centered vertically and horizontally in its display area.
Parameters:
image - The image to be displayed by the label.


Wenn diese "ImageIcon", die du da verwendest, von dem Label angenommen werden, machst du z.B. einfach ein
Code:
JLabel 02 = new JLabel(woerter.get(0));


Das
Code:
ArrayList woerter = new ArrayList();
funktioniert, überrascht mich

ich hätte hier ein
Code:
ArrayList<ImageIcon> woerter = new ArrayList<ImageIcon>();
erwartet.

Daher könnte es sein das du es vielleicht in deinem Code auf ImageIcon casten musst. Ungefähr so:
Code:
JLabel 02 = new JLabel((ImageIcon)woerter.get(0));


Ich weis nicht besonders "genau", aber ich hoffe dennoch ein wenig hilfreich ^^
 
Hi,

das mit dem Generic halte ich für eine gute Idee. In deinem Code mischst Du in der ArrayList woerter Objekttypen:
Java:
ArrayList woerter = new ArrayList();
woerter.add("Hallo"); // <- String
woerter.add(new ImageIcon("http://www.tutorials.de/forum/images/54.jpg")); // <- ImageIcon
Zumal Du die Liste ja mischst, weisst Du doch nicht sooo genau, ob an Position 0 ein String und an Position 1 ein ImageIcon ist, oder?

Sprich, weiter unten in deinem Code:
Java:
JLabel 01 = new JLabel(String.format(" ", i, woerter.get(0))); // <- Sicher das es ein String ist?
hauptPanel.add(01);
ist die Chance 1:1 das der Aufruf woerter.get(0) einen String zurückgibt ... :)

Gruß Sen
 
Zuletzt bearbeitet:
ich danke euch vielmals :D
Es hat an sich jetzt geklappt so wie ich will. Ich schau jetzt nur noch, dass ich es noch etwas komprimieren kann :)

Die lange Form sieht jetzt wirklich so aus

Code:
import java.util.ArrayList;
import java.util.Collections;
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class karten02
{
    public karten02()
    {
        ArrayList bilder = new ArrayList();
        bilder.add(new ImageIcon("http://www.tutorials.de/forum/images/54.jpg"));
        bilder.add(new ImageIcon("http://www.tutorials.de/forum/images/54.jpg"));
        bilder.add(new ImageIcon("http://www.tutorials.de/forum/images/73.jpg"));
        bilder.add(new ImageIcon("http://www.tutorials.de/forum/images/73.jpg"));
        bilder.add(new ImageIcon("http://www.tutorials.de/forum/images/44.jpg"));
        bilder.add(new ImageIcon("http://www.tutorials.de/forum/images/44.jpg"));
        bilder.add(new ImageIcon("http://www.tutorials.de/forum/images/61.jpg"));
        bilder.add(new ImageIcon("http://www.tutorials.de/forum/images/61.jpg"));        

        Collections.shuffle(bilder);
        
        JFrame fenster = new JFrame("Kartentest");
        fenster.setLayout(new BorderLayout());
        
        JPanel hauptPanel = new JPanel();
        hauptPanel.setBorder(new EtchedBorder());
        
        JPanel karten = new JPanel();
        karten.setBorder(new EtchedBorder());
        karten.setLayout(new GridLayout(0, 4));
          
   
        JPanel karte01 = new JPanel();
        JLabel Bild01 = new JLabel((ImageIcon)bilder.get(0));
        karte01.add(Bild01);  
        karte01.setBorder(new EtchedBorder());
        karten.add(karte01);
        
        JPanel karte02 = new JPanel();
        JLabel Bild02 = new JLabel((ImageIcon)bilder.get(1));
        karte02.add(Bild02);  
        karte02.setBorder(new EtchedBorder());
        karten.add(karte02);
        
        JPanel karte03 = new JPanel();
        JLabel Bild03 = new JLabel((ImageIcon)bilder.get(2));
        karte03.add(Bild03);  
        karte03.setBorder(new EtchedBorder());
        karten.add(karte03);
        
        JPanel karte04 = new JPanel();
        JLabel Bild04 = new JLabel((ImageIcon)bilder.get(3));
        karte04.add(Bild04);  
        karte04.setBorder(new EtchedBorder());
        karten.add(karte04);

        JPanel karte05 = new JPanel();
        JLabel Bild05 = new JLabel((ImageIcon)bilder.get(4));
        karte05.add(Bild05);  
        karte05.setBorder(new EtchedBorder());
        karten.add(karte05);
        
        JPanel karte06 = new JPanel();
        JLabel Bild06 = new JLabel((ImageIcon)bilder.get(5));
        karte06.add(Bild06);  
        karte06.setBorder(new EtchedBorder());
        karten.add(karte06);
        
        JPanel karte07 = new JPanel();
        JLabel Bild07 = new JLabel((ImageIcon)bilder.get(6));
        karte07.add(Bild07);  
        karte07.setBorder(new EtchedBorder());
        karten.add(karte07);
        
        JPanel karte08 = new JPanel();
        JLabel Bild08 = new JLabel((ImageIcon)bilder.get(7));
        karte08.add(Bild08);  
        karte08.setBorder(new EtchedBorder());
        karten.add(karte08);
        
              
        hauptPanel.add(karten);
        hauptPanel.setVisible(true);
        fenster.add(hauptPanel, BorderLayout.WEST);
        
        fenster.pack();
        fenster.setVisible(true);
      }
}

ich schau ma wie ich das ganze noch kürzen kann oder so ;)
Aber wie gesagt vielen dank für eure Hilfe :)

lg
Yuri
 

Neue Beiträge

Zurück