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
Klasse SGFrame
Klasse SGBubbleSort
Klasse SGButtons
Liebe Grüße,
Christian
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