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

标签 java swing sorting applet paint

我有两个类:一个用于 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]);
  }
}  }

Gui(小程序):

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

我的目的是用绘画在坐标系中绘制排序后的数组 方法。问题是,当我尝试创建绘画方法时,整个屏幕是白色的,我看不到任何东西

最佳答案

您需要解决几个细节:

  1. 您应该创建一个覆盖 JPanel 的类来执行自定义绘图。您可以在 Gui 类中创建该类的实例。

  2. 您应该重写 paintComponet() 而不是 paint()

  3. paintComponent(Graphics g) 中的第一行应该是 super.paintComponent(g) 以确保父类(super class)可以绘制自身。

  4. 您需要小心,不要让您的排序算法接管主线程。这将导致您的应用程序卡住,并且在排序完成之前不会绘制任何内容。

关于java - Applet 中的 Paint 方法(Java 中的排序算法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48853130/

相关文章:

java - 如何将无限进度添加到网络浏览器

java - 在宾果纸牌游戏中实现 Java 图形

java - 如何在框布局的开头添加按钮?

performance - 为什么我在 Scheme 中的合并排序实现如此缓慢?

使用 apply 函数对排序后的数据集进行排名

java - 如何使用 gradle 将 Artifactory 从 Artifactory 拉到项目类路径?

java - Jacoco gradle 离线检测问题

java - 使用 fmt 标签在 jsp 中进行国际化

java - Swing 表单编辑器

sorting - 从Select标记获取值(Grails)