簡體   English   中英

Applet 中的 Paint 方法(Java 中的排序算法)

[英]Paint Method in an Applet (Sort Algorithms in Java)

我有兩個類:一個用於 GUI 的小程序和一個用於對數字進行排序的類。

排序類:

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]);
  }
}  }

桂(小程序):

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);
    }
}

我的目的是使用paint方法在坐標系中繪制排序數組。 問題是,當我嘗試創建一個繪制方法時,整個屏幕都是白色的,我看不到任何東西

您需要解決幾個細節:

  1. 您應該創建一個覆蓋JPanel的類來進行自定義繪圖。 您可以在Gui類中創建該類的實例。

  2. 您應該覆蓋paintComponet()而不是paint()

  3. super.paintComponent(g) paintComponent(Graphics g)的第一行應該是super.paintComponent(g)以確保超類可以繪制自己。

  4. 您需要注意排序算法不會接管主線程。 這將導致您的應用程序凍結,並且在排序完成之前不會繪制任何內容。

您需要創建一個Thread對象並將其設置為每秒調用run方法 30 次。 在這個方法中,調用主JPanel repaint()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM