简体   繁体   中英

Paint Method in an Applet (Sort Algorithms in Java)

I have two classes: One applet for the GUI and one class to sort numbers.

Sort Class:

public class Sortierung {

public int[] Zahlen = {5,2,3,1,4};
int z;



public static int zufallszahl (int z){
 int dauer = ((int)(Math.random()*z))+1;
 return dauer;
}

   public void ArrayErstellen(int l){
    int[] myIntArray = new int[l];
  for(int f=0;f<myIntArray.length;f++){
      myIntArray[f]=zufallszahl(10);
    }
    Zahlen=myIntArray;
}

public int[] BubbleSort() {
  for(int p=0;p<Zahlen.length-1;p++){
   for(int i=0;i<Zahlen.length-1;i++){
     if(Zahlen[i]<Zahlen[i+1]){
       continue;  //beendet den derzeitigen Schleifenablauf
     }
     else{
      z=Zahlen[i];
      Zahlen[i]=Zahlen[i+1];
      Zahlen[i+1]=z;

     }
   }
  }
  return Zahlen;
}

public int[] InsertionSort() {
 int f = 0; //Variable 1
 int j = 0; //Variable 2
  for(int i = 1;i < Zahlen.length;i++){ 
   j = i; 
    while((j>0)&&(Zahlen[j-1]>Zahlen[j])){
     f = Zahlen[j-1];
     Zahlen[j-1] = Zahlen[j];
     Zahlen[j] = f;
     j--;
    }
   }
  return Zahlen;
}

public int[] SelectionSort(){

    for (int i = 0; i < Zahlen.length - 1; i++){
        int s = i; //Neue Variable für die Schleife
        for (int j = i + 1; j < Zahlen.length; j++)
            if (Zahlen[j] < Zahlen[s]){    
                s = j;
            }    

        int smallerNumber = Zahlen[s];  
        Zahlen[s] =Zahlen[i];
        Zahlen[i] = smallerNumber;
    }
    return Zahlen;
}

public void ArrayWiedergeben(int[] eimer){
  for(int u=0;u<eimer.length;u++){
    System.out.println(eimer[u]);
  }
}  }

Gui (Applet):

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

public class Gui extends JApplet {

    JTextField tf;
    JButton b;
    JButton k;
    JLabel s;
    JLabel u;
    int anzahl;
    int test = 0;

    JPanel p = new JPanel();
    JPanel h = new JPanel();
    JPanel f = new JPanel();
    Sortierung neu = new Sortierung();
    Choice Sortierungsmethode = new Choice();

    ActionListener startOhr = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            anzahl = Integer.parseInt(tf.getText());
            if (anzahl > 100) {
                tf.setText("Wert zu hoch.");
                return;
            }
            neu.ArrayErstellen(anzahl);
            tf.setText("Array[" + anzahl + "] erstellt.");
        }
    };

    ActionListener sortOhr = new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            switch (Sortierungsmethode.getSelectedIndex()) {
                case 0:
                    int[] eimer = neu.BubbleSort();
                    neu.ArrayWiedergeben(eimer);
                    test = 1;
                    repaint();

                    break;
                case 1:
                    int[] eimer2 = neu.InsertionSort();
                    neu.ArrayWiedergeben(eimer2);

                    break;
                case 2:
                    int[] eimer3 = neu.SelectionSort();
                    neu.ArrayWiedergeben(eimer3);
                    break;
                default:
                    break;
            }
        }
    };

    public void init() {
        tf = new JTextField(8);
        b = new JButton("Erstellen");
        k = new JButton("Bestätigen");
        s = new JLabel("Array Länge");
        u = new JLabel("Sortmethode");
        Sortierungsmethode.add("Bubblesort");
        Sortierungsmethode.add("Insertionsort");
        Sortierungsmethode.add("Selectionsort");
        setLayout(new BorderLayout());
        p.add(s);
        p.add(tf);
        p.add(b);
        h.add(u);
        h.add(Sortierungsmethode);
        h.add(k);

        this.add(p, BorderLayout.NORTH);
        this.add(h, BorderLayout.CENTER);
        this.add(f, BorderLayout.SOUTH);
        b.addActionListener(startOhr);
        k.addActionListener(sortOhr);
    }
}

My intention is to draw the sorted array in a coordinate system with a paint method. The problem is, that when I try to create a paint method, the whole screen is white and I cant see anything

You need to address several details:

  1. You should create a class which overrides JPanel to do your custom drawing. You can create an instance of the class in your Gui class.

  2. You should override paintComponet() rather than paint() .

  3. The first line in paintComponent(Graphics g) should be super.paintComponent(g) in order to ensure that the super class can paint itself.

  4. You need to be careful that your sorting algorithm doesn't take over the main thread. This will cause your app to freeze and nothing will paint until the sorting has finished.

You need to create a Thread object and set it to call run method 30 times per second. In this method, call repaint() method of main JPanel .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM