在JFrame中创建GUI以执行冒泡,插入和快速排序,并将代码添加到执行的操作中

时间:2015-02-22 23:49:25

标签: java arrays swing jframe

我是Java新手。我将使用JFrame创建一个带有排序菜单选项的GUI,项目包括(冒泡,插入,快速排序)。我还要使用在JFrame中自动创建的动作执行事件来输入我的代码,以便根据排序选择对数字进行排序。当用户在textField中输入不超过10个整数并选择冒泡排序时,结果应显示在JLabel中。我运行我的代码没有错误,但我的结果没有出现在标签中。任何人都可以帮助解决错误编码的问题吗?请参阅下面的气泡选择代码。

private void jMenu1ActionPerformed(java.awt.event.ActionEvent evt) {                                       
         // TODO add your handling code here:
         int c, n, d, swap;
        Scanner in = new Scanner(System.in);
        n=in.nextInt();

        int array[] = new int[n];
        for (c = 0; c < n; c++)
      {
        array[c]= in.nextInt();

       for(c=0;c < (n-1);c++)
      {
          for (d=0; d < n-c-1;d++)
          {
          if(array[d]>array[d+1])
          {
              swap=array[d];
              array[d]=array[d+1];
              array[d+1]=swap;
          }
      }
      }
      for ( c=0;c<n;c++)
      {
         jTextArea1.setText(Integer.toString(array[c])); 
                 //Integer.toStri

      }

    }                                      

    }                                      

1 个答案:

答案 0 :(得分:1)

我希望我的样本会帮助你,即使我做了一些个人决定,因为它并非一帆风顺。无论如何,让我做一些准确性:默认情况下,如果您没有从排序菜单中选择任何内容并直接点击启动,它将调用冒泡排序。此外,如果选中它,则复选框将尝试计算升序,如果不是,则表示降序。

对于isSortable()方法,你提到了我在代码中包含的大约10个数字的条件,但是,我不知道你想要哪个条件,所以我实现了一个return true方法,我会告诉你完成,同样的算法,我明确地把默认值检查GUI是好的。 至于分隔符,我假设你只想管理整数并用“,”分隔,所以,再次,如果你想要丰富它:)!

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Sorter extends JPanel implements ActionListener {
    private static final long serialVersionUID = -5548803322850070957L;
    private static final String BUBBLE_SORT = "bubble sort";
    private static final String INSERTION_SORT = "insertion sort";
    private static final String QUICK_SORT = "quick sort";
    private static final String SEPARATOR = ",";
    private static final String NO_RESULT = "no result";

    private static final Dimension TEXT_INPUT_DIM = new Dimension(200, 30);

    private static final JMenuBar MENU = new JMenuBar();
    private static final JMenu SORT = new JMenu("Sorting Algorithms");
    private static final JMenuItem BUBBLE = new JMenuItem(BUBBLE_SORT);
    private static final JMenuItem INSERTION = new JMenuItem(INSERTION_SORT);
    private static final JMenuItem QUICK_S = new JMenuItem(QUICK_SORT);

    private final JTextField textfieldInput = new JTextField();
    private final JCheckBox checkbox = new JCheckBox();
    private final JLabel orderLabel = new JLabel("sort in ascending order");

    private final JLabel labRes = new JLabel("sorted result : ");
    private final JLabel res = new JLabel(NO_RESULT);

    private static String selectedMenu;

    public Sorter() {
        setLayout(new GridLayout(2, 1));
        textfieldInput.setPreferredSize(TEXT_INPUT_DIM);

        JPanel top = new JPanel();
        top.setLayout(new FlowLayout(10));
        top.add(textfieldInput);
        top.add(createPanelCheckbox());
        top.add(createSortButton());
        add(top);

        add(createPanelResult());
    }

    private Component createSortButton() {
        JButton sortButton = new JButton("Launch");
        sortButton.addActionListener(this);
        return sortButton;
    }

    private final JPanel createPanelResult() {
        JPanel p = new JPanel();
        p.setLayout(new BorderLayout());
        p.add(labRes, BorderLayout.WEST);
        p.add(res, BorderLayout.CENTER);
        return p;
    }

    private final JPanel createPanelCheckbox() {
        JPanel p = new JPanel();
        p.setLayout(new FlowLayout(10));
        p.add(checkbox);
        p.add(orderLabel);
        return p;
    }

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.setSize(500, 300);
        f.setLocationRelativeTo(null);
        f.add(new Sorter());
        f.setJMenuBar(createMenu());
        f.setVisible(true);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private static JMenuBar createMenu() {
        BUBBLE.addActionListener(new MenuItemListener());
        SORT.add(BUBBLE);
        INSERTION.addActionListener(new MenuItemListener());
        SORT.add(INSERTION);
        QUICK_S.addActionListener(new MenuItemListener());
        SORT.add(QUICK_S);
        MENU.add(SORT);
        return MENU;
    }

    static class MenuItemListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            selectedMenu = e.getActionCommand();
        }
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String content = textfieldInput.getText();
        String[] parsedNumbers = content.split(SEPARATOR);
        if (isSortable(parsedNumbers) && parsedNumbers.length < 10) {
            int[] result = null;

            if(selectedMenu==null)
                selectedMenu = BUBBLE_SORT;

            switch (selectedMenu) {
            case BUBBLE_SORT:
                result = bubbleSort(checkbox.isSelected());
                break;
            case INSERTION_SORT:
                result = insertionSort(checkbox.isSelected());
                break;
            case QUICK_SORT:
                result = quickSort(checkbox.isSelected());
                break;

            }
            res.setText(result == null ? NO_RESULT : fillResultLabel(result));
        }
    }

    private String fillResultLabel(int[] result) {
        StringBuilder res = new StringBuilder();
        for (int nb : result) {
            res.append(nb + " ");
        }
        return res.toString();
    }

    private final boolean isSortable(String[] numbers) {
        return true;
    }

    private int[] bubbleSort(boolean sortAscending) {
        return new int[]{1,2,3,4};
    }

    private int[] insertionSort(boolean sortAscending) {
        return new int[]{5,6,7,8};
    }

    private int[] quickSort(boolean sortAscending) {
        return new int[]{9,10,11,12};
    }
}