Hi Leute, ich arbeite momentan an einer Visualisierung von Sortierverfahren. Mein Ziel ist es meine zufällig generierten Zahlen in ein JPanel reinzeichnen zu lassen. Danach soll der Sortieralgorithmus drüber laufen und dann wieder gezeichnet werden. Ich habe hierzu die paintComponent() Methode bearbeitet und mit repaint() wieder aufgerufen. Nun habe ich zwei Probleme:
1. er wirft mir eine NullpointerException in Zeile 111
2. Davor ist nach dem Aufruf von repaint() nichts passiert?!
Hier mein Code:
Vielen Dank für eure Hilfe,
MfG Lennarttw
1. er wirft mir eine NullpointerException in Zeile 111
Java:
for(int i = 0; i < zahlen.length; i++){
Hier mein Code:
Java:
public class Facharbeit extends javax.swing.JFrame {
private JFrame f;
private JPanel content;
private DrawPanel p1;
private DrawPanel p2;
private DrawPanel p3;
private DrawPanel p4;
private JComboBox box1;
private JComboBox box2;
private JComboBox box3;
private JComboBox box4;
private JButton b1;
int anzahl = 10;
int[] zahlen;
private void gui(){
f = new JFrame("Visualisierung von Sortierverfahren");
f.setVisible(true);
f.setSize(1000, 800);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().setLayout(new BorderLayout());
content = new JPanel(new GridBagLayout());
content.setBackground(Color.GRAY);
GridBagConstraints c = new GridBagConstraints();
p1 = new DrawPanel();
p2 = new DrawPanel();
p3 = new DrawPanel();
p4 = new DrawPanel();
p1.setBorder(BorderFactory.createEtchedBorder());
p1.setPreferredSize(new Dimension(100,200));
p2.setBorder(BorderFactory.createRaisedBevelBorder());
p2.setPreferredSize(new Dimension(100,200));
p3.setBorder(BorderFactory.createRaisedBevelBorder());
p3.setPreferredSize(new Dimension(100,200));
p4.setBorder(BorderFactory.createRaisedBevelBorder());
p4.setPreferredSize(new Dimension(100,200));
String[] items = {"Bubblesort", "Selectionsort", "Insertionsort", "Quicksort", "Mergesort"};
box1 = new JComboBox(items);
box2 = new JComboBox(items);
box3 = new JComboBox(items);
box4 = new JComboBox(items);
b1 = new JButton("sortieren");
c.insets = new Insets(30, 30 , 30 , 30);
c.gridx = 0;
c.gridy = 2;
b1.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent evt){
sortieren();
p1.repaint();
bubbleSort(zahlen);
p1.repaint();
}
});
content.add(b1, c);
c.gridx = 0;
c.gridy = 1;
content.add(box1, c);
c.gridx = 1;
content.add(box2, c);
c.gridx = 2;
content.add(box3, c);
c.gridx = 3;
content.add(box4, c);
c.gridx = 0;
c.gridy = 0;
content.add(p1, c);
c.gridx = 1;
c.gridy = 0;
content.add(p2, c);
c.gridx = 2;
c.gridy = 0;
content.add(p3, c);
c.gridx = 3;
c.gridy = 0;
content.add(p4, c);
f.add(content, BorderLayout.WEST);
}
public void sortieren(){
zahlen = new int [anzahl];
for (int i = 0; i < anzahl; i++){
java.util.Random randomGenerator = new java.util.Random();
zahlen[i] = randomGenerator.nextInt(100);
}
}
private class DrawPanel extends JPanel {
private int[] zahlen;
@Override
public void paintComponent (Graphics g){
super.paintComponents(g);
int x = 8;
for(int i = 0; i < zahlen.length; i++){
int zahl = zahlen[i];
g.drawLine(x, 100-(zahl*2), x, 100);
x = x+3;
}
}
}
public int[] bubbleSort( int[] zahlen ) {
int k = zahlen.length;
while (k > 1) {
int i = 0;
while ( i < (k-1)) {
if (zahlen[i] > zahlen[i+1]) {
int puffer = zahlen[i];
zahlen[i] = zahlen[i+1];
zahlen[i+1] = puffer;
}
i = i+1;
}
k = k-1;
}
return zahlen;
}
MfG Lennarttw