Sortieralgorithmus grafisch darstellen

ChristianEG

Mitglied
Aloha,

ich arbeite gerade daran mehrere Sortieralgorithmen (BubbleSort, SelectionSort und InsertionSort) grafisch darzustellen. Ich habe erstmal eine einfache GUI mit JFrame und verschachtelten JPanels gebaut. Zunächst habe ich den BubbleSort in die GUI eingebunden. Dieser sortiert 10 Zufallszahlen der reihe nach. Das funktioniert soweit auch gut. Jede Zahl bekommt einen Button und wird so dargestellt.

Allerdings würde ich das ganze etwas anschaulicher machen. Man soll quasi in einzelnen Schritten sehen was passiert. Bisher wird einfach das "ganze" dem Anwender vorgeknallt.

Mein Plan war es erstmal alle 10 Zufallszahlen anzuzeigen. Danach sollen die Sortierschritte nach und nach angezeigt werden. Ich habs daher mal primitiv mit einem Thread.sleep(xx) nach der Erzeugung eines neuen Buttons probiert. Allerdings tut sich da nichts. Ich hab jetzt auch schon länger nicht mehr Programmiert und hänge da gerade total fest. Kann mir jemand weiterhelfen? Bin auch für Verbesserungsvorschlänge des restlichen Codes dankbar, da kann man sicherlich einiges anders und besser machen!

Hier der Code:

Klasse SGMain
Java:
package sortguipckg;

public class SGMain {

    public static void main(String[] args) {
	SGFrame sgf = new SGFrame();
    }
}

Klasse SGFrame
Java:
package sortguipckg;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;

public class SGFrame extends JFrame {

    private static final long serialVersionUID = 1L;
    JPanel oben = new JPanel();
    JPanel unten = new JPanel();
    JPanel unten2 = new JPanel();
    
    public class MyInnerClassActionListener implements ActionListener {
	public void actionPerformed(ActionEvent e) {
	    if("BubbleButton".equals(e.getActionCommand())) {
	    }
	}
    }
    
    public SGFrame() {
	super("Sortier Algorithmen");
	setSize(600, 800);
	setResizable(false);
	Container MainContainer = getContentPane();
	GridBagLayout gbl = new GridBagLayout();
	MainContainer.setLayout(gbl);
	GridBagConstraints gbc = new GridBagConstraints();
	
	oben.setLayout(new GridLayout(1,0));
	gbc.gridx = 0; // x-Position im gedachten Gitter
	gbc.gridy = 0; // y-Position im gedachten Gitter
	gbc.fill = GridBagConstraints.HORIZONTAL;
	gbl.setConstraints(oben, gbc);
	
	unten.setLayout(new GridLayout(0,1));
	gbc.gridx = 0; // x-Position im gedachten Gitter
	gbc.gridy = 1; // y-Position im gedachten Gitter
	gbc.fill = GridBagConstraints.HORIZONTAL;
	gbl.setConstraints(unten, gbc);
	
	unten2.setLayout(new GridLayout(0,10));
	gbc.gridx = 0;
	gbc.gridy = 2;
	gbc.fill = GridBagConstraints.HORIZONTAL;
	gbl.setConstraints(unten2, gbc);
	
	JLabel jl = new JLabel("Sortier Algorithmus: ");
	
	SGButtons BubbleButton = new SGButtons("BubbleSort");
	BubbleButton.addActionListener(new MyInnerClassActionListener());
	BubbleButton.setActionCommand("BubbleButton");
	
	add(oben);
	add(unten);
	oben.add(jl);
	oben.add(BubbleButton);
	unten.add(unten2);
	
	setDefaultCloseOperation(EXIT_ON_CLOSE);
	pack();
	setVisible(true);
    }
    
    public void BubbleSort() {
	SGBubbleSort.BSErstelleZufallsZahlen();
	for (int i=0; i<SGBubbleSort.Zufallszahlen.length; i++) {
	    SGButtons ButtonX = new SGButtons("");
	    ButtonX.setText(SGBubbleSort.Zufallszahlen[i] + "");
	    unten2.add(ButtonX);
	}
	//System.out.println("Generierte Zufallszahlen " + java.util.Arrays.toString(SGBubbleSort.Zufallszahlen));
	do { 
	    SGBubbleSort.BSTauscheZahlen();
	    for (int i=0; i<SGBubbleSort.Zufallszahlen.length; i++) {

		SGButtons ButtonY = new SGButtons("");
		ButtonY.setText(SGBubbleSort.Zufallszahlen[i] + "");
		unten2.add(ButtonY);
	    }
	    SGBubbleSort.BSVergleiche();
	} while (SGBubbleSort.match < SGBubbleSort.AnzahlZahlen);
	unten2.revalidate();
	pack();
    }
 }

Klasse SGBubbleSort
Java:
package sortguipckg;

public class SGBubbleSort {

    static int Zufallszahlen[] = new int [10];
    static int SortZufallszahlen[] = new int [Zufallszahlen.length];
    static int AnzahlZahlen = Zufallszahlen.length;
    static int Buffer1;
    static int Buffer2;
    static int match=0;
    static int counter=0;
	
    public static void BSErstelleZufallsZahlen() {
	for (int i=0; i<AnzahlZahlen; i++) {
	    Zufallszahlen[i] = (int) ((Math.random())*(Zufallszahlen.length));
	}
	
	for (int i=0; i<AnzahlZahlen; i++) {
	    SortZufallszahlen[i] = Zufallszahlen[i];	
	}
	java.util.Arrays.sort(SortZufallszahlen);
    }
	
    public static void BSTauscheZahlen() {
	for (int i=0; i<Zufallszahlen.length-1; i++) { 
	    if(Zufallszahlen[i] > Zufallszahlen[i+1]) { 
		Buffer1 = Zufallszahlen[i];
		Buffer2 = Zufallszahlen[i+1];
		Zufallszahlen[i] = Buffer2;
		Zufallszahlen[i+1] = Buffer1;
	    }	
	}		
    }
		
    public static void BSVergleiche() {
	for (int i=0; i<AnzahlZahlen; i++) {
	    if (Zufallszahlen[i] == SortZufallszahlen[i]) {
		match = match + 1;
	    } 
	}
	if (match<AnzahlZahlen) {
	    match = 0;
	}
    }
	
   /* public static void main(String[] args) {	
	BSErstelleZufallsZahlen();
	System.out.println("Generierte Zufallszahlen  " + java.util.Arrays.toString(Zufallszahlen));
	System.out.println("Sortierte Zufallszahlen   " + java.util.Arrays.toString(SortZufallszahlen));
	
	do { 
	    BSTauscheZahlen();
	    System.out.println(java.util.Arrays.toString(Zufallszahlen));
	    BSVergleiche();
	} while (match < AnzahlZahlen);
    }	*/	
}

Klasse SGButtons
Java:
package sortguipckg;

import javax.swing.JButton;

public class SGButtons extends JButton {
    
    SGButtons(String text) {
	super(text);
    }
}

Liebe Grüße,

Christian
 

truesoul

Top Contributor
Ein Beispiel :
Java:
for ( int = nummer ; nummer < 10 ; nummer ++ )
{
      Thread.sleep(1000); // 1 Sekunde 
       System.out.println( "Nummer ist: "+Nummer ) ;
       // Mache nach 1 Sekunden den nächsten Schritt 


}

Also beim bubblesort soll er z.B die nächste Zahl tauschen.
Und die Änderung von den Buttons gleich mit ändern.
Java:
 JButton.setText( ""+Nummer  );
 

ChristianEG

Mitglied
Hallo,

danke für den Tipp!!

Hab das mal eingefügt. Habe das so gemacht:

Java:
	    for (int i=0; i<SGBubbleSort.Zufallszahlen.length; i++) {
		    Thread.sleep(1000);
		    SGButtons ButtonY = new SGButtons("");
			ButtonY.setText(SGBubbleSort.Zufallszahlen[i] + "");
			unten2.add(ButtonY);
	    }

Funktioniert leider nicht so wirklich. Wenn ich jetzt den BubbleSort aufrufe bleibt die JavaApp einfach 10 Sekunden hängen und beendet sich dann. Was mache ich falsch?

Gruss,

Christian
 

truesoul

Top Contributor
Hallo .
Hier mal ein Beispiel:

Java:
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;


public class Beispiel extends Thread {

    private JButton button;
    private JButton button2;
    private JButton button3;
    private JButton button4;

    int sortiereMich[] = {3,1,6,4};
    int tmp = 0 ;
    boolean fertig = false;

    public Beispiel()
    {

        button = new JButton(""+sortiereMich[0]);
        button2 = new JButton(""+sortiereMich[1]);
        button3 = new JButton(""+sortiereMich[2]);
        button4 = new JButton(""+sortiereMich[3]);

        initComponents();

        
    }

    public void initComponents()
   {
        JFrame frame = new JFrame("Änder Zahl");
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.setBounds(0, 0, 300, 80);

        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEADING));
        panel.add(button);
        panel.add(button2);
        panel.add(button3);
        panel.add(button4);
        
        frame.add(panel);
        frame.setVisible(true);
    }

    @Override
    public void run()
    {
        while(!fertig)
        {
            try
            {
                for(int i = 1; i < sortiereMich.length;i++)
                {
                    Thread.sleep(1000);
                    if(sortiereMich[i] < sortiereMich[i-1])
                    {
                        tmp = sortiereMich[i];
                        sortiereMich[i] = sortiereMich[i-1];
                        sortiereMich[i-1] = tmp;
                    }
                    
                    button.setText(""+sortiereMich[0]);
                    button2.setText(""+sortiereMich[1]);
                    button3.setText(""+sortiereMich[2]);
                    button4.setText(""+sortiereMich[3]);
                }
                fertig = true;
            }
            catch( InterruptedException e)
            {
                System.out.println(e.getMessage());
            }

        }
    }

    public static void main(String[] args) {
        new Beispiel().start();
    }
}

Und dort kannst du dann nachvollziehen wie er per Bubblesort sortiert :)

Mfg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Sortieralgorithmus - Aufgabe mit Lösungsidee Java Basics - Anfänger-Themen 20
L Sortieralgorithmus Java Basics - Anfänger-Themen 17
2 Erste Schritte Sortieralgorithmus Array Java Basics - Anfänger-Themen 6
D Sortieralgorithmus mit Systemzeit messen Java Basics - Anfänger-Themen 7
K Sortieralgorithmus Java Basics - Anfänger-Themen 10
Messoras Sortieralgorithmus graphisch darstellen Java Basics - Anfänger-Themen 6
M BubbleSort (Sortieralgorithmus) Java Basics - Anfänger-Themen 28
Streeber Sortieralgorithmus Java Basics - Anfänger-Themen 8
F Sortieralgorithmus von rekursiv auf iterativ? Java Basics - Anfänger-Themen 21
G Sortieralgorithmus mit Rekursion funktioniert nicht Java Basics - Anfänger-Themen 26
S Hilfe zu einfachstem Sortieralgorithmus gesucht Java Basics - Anfänger-Themen 2
N sortieralgorithmus Java Basics - Anfänger-Themen 32
R Frage zu Sortieralgorithmus Java Basics - Anfänger-Themen 13
H Wav-Datei grafisch darstellen Java Basics - Anfänger-Themen 2
N Datei einlesen und grafisch anzeigen Java Basics - Anfänger-Themen 31
A Methoden Gedanken Anstöße zur Realisierung zweier Ideen (Grafisch Sekunden zählen und Frameaufteilung) Java Basics - Anfänger-Themen 18
Dit_ Anzahl der Bestellungen grafisch abbilden | Statistisk Java Basics - Anfänger-Themen 6
H Fehler-Stream grafisch umsetzen Java Basics - Anfänger-Themen 4
Spin Von der Tastatur einlesen grafisch Java Basics - Anfänger-Themen 2
A mathematische Funktionen grafisch darstellen Java Basics - Anfänger-Themen 8
M Datenpaare einlesen und grafisch ausgeben Java Basics - Anfänger-Themen 9
M Sortieralgorythmen bzw. Suchalgorythmen grafisch darstellen Java Basics - Anfänger-Themen 3
Chucky Rekursion grafisch darstellen anhand eines Applets Java Basics - Anfänger-Themen 14
G Binärbaum grafisch darstellen Java Basics - Anfänger-Themen 4
W Liste mit Listen in JTable darstellen Java Basics - Anfänger-Themen 1
X Wie kann man ein Regex erstellen, die 8-Bit-Binär-Zahlen darstellen. Java Basics - Anfänger-Themen 1
M Parse-Tree eines statements darstellen Java Basics - Anfänger-Themen 0
H Binominalkoeffizient tail-rekursiv in java darstellen Java Basics - Anfänger-Themen 0
S CSV Datei auslesen und anders darstellen Java Basics - Anfänger-Themen 2
F Hierarchi im code darstellen Java Basics - Anfänger-Themen 11
CptK Best Practice Merge-Sort als Baum darstellen Java Basics - Anfänger-Themen 3
E Kreis soll eine Raupe darstellen Java Basics - Anfänger-Themen 37
Orkanson Long Binär darstellen Java Basics - Anfänger-Themen 1
J Eingelesene Datei im Histrogramm darstellen Java Basics - Anfänger-Themen 3
pkm Best Practice BufferedImage in JPane darstellen - aber wie? Java Basics - Anfänger-Themen 22
D Klassen Wert aus JTextfield in JLabel (andere Klasse) darstellen. Java Basics - Anfänger-Themen 60
kilopack15 DoWhile-Schleife als While-Schleife darstellen Java Basics - Anfänger-Themen 9
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
E Input/Output Switch ausgabe anpassen bzw. anders darstellen Java Basics - Anfänger-Themen 13
L Mit java ein wort mehrfach versetzt darstellen Java Basics - Anfänger-Themen 14
3 Gitternetz richtig darstellen Java Basics - Anfänger-Themen 3
M Konkatenation in Sequenzdiagramm darstellen Java Basics - Anfänger-Themen 0
I Anzahl der Rechenschritte darstellen lassen Java Basics - Anfänger-Themen 11
Z Vector in jTextField/jLabel darstellen Java Basics - Anfänger-Themen 4
N Erste Schritte MySQL Tabelle in JList darstellen Java Basics - Anfänger-Themen 1
F Wurzelzeichen darstellen, Wie? Java Basics - Anfänger-Themen 7
V Intervall als Array darstellen Java Basics - Anfänger-Themen 10
A OOP Buchstaben mit ASCII Werten darstellen Java Basics - Anfänger-Themen 1
B Einfache jsp Seite darstellen Java Basics - Anfänger-Themen 9
P Erste Schritte Buffered Image splitten und darstellen Java Basics - Anfänger-Themen 2
U Exponent ausgeben bzw. darstellen Java Basics - Anfänger-Themen 15
H Wie kann ich in Java unbekannte Variablen in Gleichungen darstellen? Java Basics - Anfänger-Themen 3
J Zeichen für Durchmesser Ø in Label darstellen Java Basics - Anfänger-Themen 15
F Erste Schritte bild darstellen Java Basics - Anfänger-Themen 2
J Ein Grafisches Gitternetz (für Schiffe versenken) darstellen - Wie? Java Basics - Anfänger-Themen 6
P Zahlen als Unicode darstellen Java Basics - Anfänger-Themen 2
F Koordinaten JList darstellen Java Basics - Anfänger-Themen 4
A double and add algorithmus für elliptische kurven/ integer binär darstellen Java Basics - Anfänger-Themen 14
M Bild in Applet darstellen Java Basics - Anfänger-Themen 6
T Input/Output Scanner Eingaben auf Console farbig darstellen, wie? Java Basics - Anfänger-Themen 13
S String mit ASCII/HTML Zeichen darstellen Java Basics - Anfänger-Themen 10
D Graphics2D (Welle darstellen) Java Basics - Anfänger-Themen 2
D Problem: Deutschlandkarte darstellen ? Java Basics - Anfänger-Themen 12
Beckenbauer Eine anstehende (sehr simple) Applikation in UML darstellen (Klassendiagramm) Java Basics - Anfänger-Themen 20
D Kreissegment darstellen Java Basics - Anfänger-Themen 16
alderwaran objekthierarchie darstellen während der laufzeit Java Basics - Anfänger-Themen 2
F FileSystem in Baum darstellen/wurzel festlegen Java Basics - Anfänger-Themen 3
E Auschnitt einer Liste darstellen Java Basics - Anfänger-Themen 7
I Baum graphisch darstellen Java Basics - Anfänger-Themen 2
A Klassen als GUI darstellen Java Basics - Anfänger-Themen 3
S Skatblatt darstellen durch Random? Java Basics - Anfänger-Themen 48
B OOP Comparator - Sortierung "optisch" Darstellen Java Basics - Anfänger-Themen 17
Forlan " <- Darstellen Java Basics - Anfänger-Themen 5
C Zwei Klassen in einem Fenster darstellen Java Basics - Anfänger-Themen 32
S RBTree - baumstruktur darstellen Java Basics - Anfänger-Themen 7
T Tupelweises Darstellen Java Basics - Anfänger-Themen 14
Z Java in HTML darstellen Java Basics - Anfänger-Themen 4
Y Einfachen Quelltext in UML darstellen mit Eclipse Java Basics - Anfänger-Themen 8
A Umlaute darstellen Java Basics - Anfänger-Themen 4
A bilddateinamen aus array auslesen und bild darstellen? Java Basics - Anfänger-Themen 2
T ASCII Tabelle darstellen Java Basics - Anfänger-Themen 7
S String Hochzahlen darstellen Java Basics - Anfänger-Themen 6
G BigDecimal mit zwei Nachkommastellen darstellen Java Basics - Anfänger-Themen 2
K Kurve Darstellen Java Basics - Anfänger-Themen 4
A Einfachstes HTML in Java darstellen Java Basics - Anfänger-Themen 4
T Inhalt einer Datei in Jlist darstellen Java Basics - Anfänger-Themen 6
G Wert im Eingabedialog darstellen Java Basics - Anfänger-Themen 2
B Bild in JFrame darstellen geht irgendwie nicht Java Basics - Anfänger-Themen 13
X Java Applet offline darstellen Java Basics - Anfänger-Themen 8
E Schreiben in Excel -Zellen farbig darstellen Java Basics - Anfänger-Themen 4
M Dateisystem in Jtree - Ordnericon darstellen Java Basics - Anfänger-Themen 4
V Text in Eingabefeld mehrfarbig darstellen? Java Basics - Anfänger-Themen 6
Z Netzwerk graphisch Darstellen Java Basics - Anfänger-Themen 5
M Laufzeitverhalten von Sortieralgorithmen darstellen Java Basics - Anfänger-Themen 3
S Verzeichnis darstellen Java Basics - Anfänger-Themen 3
S Funktionsgleichungen darstellen Java Basics - Anfänger-Themen 4
H Application vernünftig darstellen und beenden Java Basics - Anfänger-Themen 2
J Mehrere Objekte in einem JFrame darstellen Java Basics - Anfänger-Themen 6
deetee Kommazahl richtig darstellen Java Basics - Anfänger-Themen 4
G Zeichen darstellen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben