我想将其他类的输出放在JFrame中代替代码:
在主要课堂内
import java.util.Arrays;
import java.util.*;
import javax.swing.JOptionPane;
import javax.swing.*;
public class Main {
public static void main(String[] args){
int choice;
int g;
String randomNo;
Scanner input=new Scanner(System.in);
randomNo=JOptionPane.showInputDialog(null,"Enter how many random no:");
g=Integer.parseInt(randomNo);
RandomAlgo rand=new RandomAlgo();
int[] data=rand.randomNum(g);
JOptionPane.showMessageDialog(null,"Your Random numbers Are : " + Arrays.toString(data));
String randomChoice;
randomChoice=JOptionPane.showInputDialog(null, "Choose Sorting algorithm: \n (1)Selection Sort \n (2)Insertion Sort \n (3)Bubble Sort \n (4)Quick Sort" );
choice=Integer.parseInt(randomChoice);
switch(choice){
case 1:{
SortingAlgo algo=new SortingAlgo();
data=algo.selectionSort(data);
break;
}
case 2:{
SortingAlgo algo=new SortingAlgo();
data=algo.InsertionSort(data);
break;
}
case 3:{
SortingAlgo algo=new SortingAlgo();
data=algo.bubbleSort(data);
break;
}
case 4:{
SortingAlgo algo=new SortingAlgo();
data=algo.quickSort(data);
}
}
}
public Main(){
JFrame frame=new JFrame("Sorted List");
JLabel jdate=new JLabel("");
frame.setSize(300,500);
frame.setVisible(true);
}
}
然后这是我的SortingAlgo类........................................ ................
import java.util.Arrays;
public class SortingAlgo{
public int[] selectionSort(int[] data){
int lenD = data.length;
int j = 0;
int tmp = 0;
for(int i=0;i<lenD;i++){
j = i;
for(int k = i;k<lenD;k++){
if(data[j]>data[k]){
j = k;
}
}
tmp = data[i];
System.out.println("\n"+ Arrays.toString(data));
data[i] = data[j];
data[j] = tmp;
}
return data;
}
public int[] InsertionSort(int[] data){
int len = data.length;
int key = 0;
int i = 0;
for(int j = 1;j<len;j++){
key = data[j];
i = j-1;
while(i>=0 && data[i]>key){
data[i+1] = data[i];
i = i-1;
data[i+1]=key;
System.out.println("\n"+ Arrays.toString(data));
}
}
return data;
}
public int[] bubbleSort(int[] data){
int lenD = data.length;
int tmp = 0;
for(int i = 0;i<lenD;i++){
for(int j = (lenD-1);j>=(i+1);j--){
System.out.println("\n"+ Arrays.toString(data));
if(data[j]<data[j-1]){
tmp = data[j];
data[j]=data[j-1];
data[j-1]=tmp;
}
} System.out.println("\n"+ Arrays.toString(data));
}
return data;
}
public int[] quickSort(int[] data){
int lenD = data.length;
int pivot = 0;
int ind = lenD/2;
int i,j = 0,k = 0;
if(lenD<2){
return data;
}
else{
int[] L = new int[lenD];
int[] R = new int[lenD];
int[] sorted = new int[lenD];
pivot = data[ind];
for(i=0;i<lenD;i++){
if(i!=ind){
if(data[i]<pivot){
L[j] = data[i];
j++;
}
else{
R[k] = data[i];
k++;
}
}
}
int[] sortedL = new int[j];
int[] sortedR = new int[k];
System.arraycopy(L, 0, sortedL, 0, j);
System.arraycopy(R, 0, sortedR, 0, k);
sortedL = quickSort(sortedL);
sortedR = quickSort(sortedR);
System.arraycopy(sortedL, 0, sorted, 0, j);
sorted[j] = pivot;
System.arraycopy(sortedR, 0, sorted, j+1, k);
System.out.println("\n"+ Arrays.toString(sorted));
return sorted;
}
}
}
我的随机课.................................
import java.util.HashSet;
import java.util.*;
public class RandomAlgo {
public int[] randomNum(int g){
Random rand = new Random();
int[] randomNumbers = new int[g];
for (int i = 0; i < g; i++) {
int e = rand.nextInt(1000);
randomNumbers[i] = e;
}
return randomNumbers;
}
}
我的代码在控制台中工作。但我现在想把排序列表的输出放在一个框架内。而不是在控制台上。
答案 0 :(得分:1)
另一个解决方案是将标准输出(即 System.out )重定向到JFrame中的文本区域
开发Custom PrintStream并调用
就足够了System.setOut( new MyCustomPrintStream() );
要了解更多详情“How to redirect console content to a textArea in java?”
答案 1 :(得分:0)
关于,
System.out.println("\n"+ Arrays.toString(data));
**//is this good? that i placed print here so i can show the ouput to the each sorting steps?**
不,这不会很好。 println打印到控制台而不是GUI。你的selectionSort()
方法已经返回一个int数组 - 那么为什么不简单地使用它呢?我将从您的selectionSort方法获取数组结果,并在GUI中使用for循环遍历数组并在JTextArea中打印结果。
switch(choice){
case 1:{
SortingAlgo algo=new SortingAlgo();
data=algo.selectionSort(data);
// you've got your sorted data here.
// put your for loop here to show it in your GUI
break;
}
答案 2 :(得分:0)
以JFrame
开头。
创建JPanel
并向其中添加一堆JRadioButton
个。这些将作为您的选择,Selection Sort
,Insertion Sort
,Bubble Sort
,Quick Sort
。将其中的每一个添加到ButtonGroup
,以便只能选择按钮。
在此面板中添加JTextField
,这将作为“随机数字长度”值(您也可以使用JSpinner
,但不要让事情复杂化。
向面板添加JButton
。这将作为“排序”按钮,它将接受输入并实际进行排序。将ActionListener
添加到此按钮
将此面板添加到框架的BorderLayout.WEST
位置...
使用JPanel
创建另一个GridLayout
。
对此,我会添加两个JList
,每个JScrollPane
s。这些将作为未排序和排序的列表。
将此面板添加到框架的BorderLayout.CENTER
位置。
当用户点击该按钮时,您需要确定选择了哪个JRadioButton
,从JTextField
获取文字,将其转换为int
(Integer.parseInt(text)
)。
生成随机数列表,将这些列表添加到第一个JList
,执行排序,然后将结果添加到第二个JList
。
请仔细阅读......
了解更多详情......