Пошаговое выполнение цикла при нажатии на кнопку - Java
Формулировка задачи:
Здравствуйте!
Не знаю, как реализовать пошаговое выполнение цикла при нажатии на кнопку. Среда Eclipse Neon.2
По задаче, как видите, имеется гномья сортировка массива. Изначально был консольный вариант, необходимо переделать под GUI с оговоренными выше условиями.
Просьба не ругаться на лишние импорты, т.к WindowBuilder стоит, но не отображается в списке компонентов ===> приходится все элементы прописывать ручками.
package dlab6_1; import java.awt.EventQueue; import java.awt.FlowLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Frame; import java.awt.TextArea; import java.awt.Toolkit; import javax.swing.SwingConstants; import javax.swing.JRadioButton; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JTextField; import java.awt.event.ActionListener; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.awt.event.WindowStateListener; import java.awt.event.ActionEvent; import java.io.BufferedReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.Writer; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.TimerTask; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; public class window { static int[] a = { 5, 2, 7, 5, 4, 45, 9, 21 }; private JFrame frame; private static JTextField textField; String FIO = ""; String GROUP = ""; String FACULTY = ""; int i = 0; int m = 1; int pr = 0; long ans = 0; long ians = 0; String tm; boolean btnpressed = false; public static boolean ff = false; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { window window = new window(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. * * @throws IOException * @throws InterruptedException */ public window() throws IOException, InterruptedException { initialize(); } /** * Initialize the contents of the frame. * * @throws IOException * @throws InterruptedException */ private void initialize() throws IOException, InterruptedException { frame = new JFrame(); frame.addWindowStateListener(new WindowStateListener() { @Override public void windowStateChanged(WindowEvent e) { if ((frame.ICONIFIED == 1) || (frame.getExtendedState() == JFrame.NORMAL)) { frame.toFront(); frame.setExtendedState(JFrame.MAXIMIZED_BOTH); } } }); frame.addWindowListener(new WindowListener() { public void windowActivated(WindowEvent event) { } public void windowClosed(WindowEvent event) { System.exit(0); } public void windowClosing(WindowEvent event) { } public void windowDeactivated(WindowEvent event) { } public void windowDeiconified(WindowEvent event) { } public void windowIconified(WindowEvent event) { } public void windowOpened(WindowEvent event) { } }); frame.setBounds(100, 100, 1026, 627); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); frame.setAlwaysOnTop(true); frame.toFront(); textField = new JTextField(); textField.setBounds(797, 68, 189, 20); frame.getContentPane().add(textField); textField.setColumns(10); textField.setText(" "); JButton btnNewButton_1 = new JButton( "Шаг вперёд 3D"); // пїЅпїЅпїЅпїЅпїЅпїЅ // пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ btnNewButton_1.setBounds(797, 165, 176, 23); frame.getContentPane().add(btnNewButton_1); /* * Dimension sSize = Toolkit.getDefaultToolkit ().getScreenSize (); * frame.setSize(sSize); */ /*frame.setVisible(true); frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.toFront(); frame.setResizable(false); frame.setVisible(false); frame.setExtendedState(JFrame.MAXIMIZED_BOTH); frame.toFront(); frame.setVisible(true);*/ /*JPanel panel = new MyPanel(); panel.setBounds(1000, 400, 1000, 1000); frame.getContentPane().add(panel);*/ int index = 1; // start of search int temp; while (index < a.length) { // until the array is fully sorted boolean nextstep=false; String st=""; for (int h=0; h<a.length; h++) { st = st+ a[h]+ " "; //textField.setText(st); } textField.setText(st); if (a[index] < a[index - 1]) { // compares nums[index] with // nums[index-1]. if // smaller, switch. temp = a[index]; a[index] = a[index - 1]; a[index - 1] = temp; index--; // must decrease index to recheck. since they have been // swapped, the array may still be out of order if (index == 0) { // prevents index from going lower than 1 index = 1; } // Thread.sleep(2000); } else { index++; // if sorted, go up } } } public static int[] gnomeSort(int[] nums) { // takes unsorted array, returns // sorted return (nums); // reaching the end of the array- completely sorted, // returns nums } }
P.S Пробовал в качестве извращения делать Thread.Sleep(время), но тогда перестает рисоваться место вывода.
Похоже, что дело в моем "процедурном" видении. ООП остается не до конца понятым.
Прошу помочь.
Обожаю этот форум! Игнор всегда...
Задал простой вопрос, просто сам не дотумкаю...
Решение задачи: «Пошаговое выполнение цикла при нажатии на кнопку»
textual
Листинг программы
import javax.swing.*; import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; public class window { static int[] a = {5, 2, 7, 5, 4, 45, 9, 21}; private static JTextField textField; boolean btnpressed = false; private JFrame frame; public window() throws IOException, InterruptedException { initialize(); } public static void main(String[] args) { EventQueue.invokeLater(() -> { try { window window = new window(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } }); } private void initialize() throws IOException, InterruptedException { frame = new JFrame(); frame.addWindowStateListener(e -> { frame.toFront(); frame.setExtendedState(JFrame.MAXIMIZED_BOTH); }); frame.addWindowListener(new WindowAdapter() { public void windowClosed(WindowEvent event) { System.exit(0); } }); frame.setBounds(100, 100, 1026, 627); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().setLayout(null); frame.setAlwaysOnTop(true); frame.toFront(); textField = new JTextField(); textField.setBounds(797, 68, 189, 20); frame.getContentPane().add(textField); textField.setColumns(10); textField.setText(" "); JButton btnNewButton_1 = new JButton("Шаг вперёд 3D"); btnNewButton_1.setBounds(797, 165, 176, 23); frame.getContentPane().add(btnNewButton_1); btnNewButton_1.addActionListener(e -> { btnpressed = true; }); Thread thread = new Thread(() -> { int index = 1; int temp; while (index < a.length) { btnpressed = false; String st = ""; if (a[index] < a[index - 1]) { temp = a[index]; a[index] = a[index - 1]; a[index - 1] = temp; index--; if (index == 0) { index = 1; } } else { index++; } for (int h = 0; h < a.length; h++) { st = st + a[h] + " "; } System.out.println(st); textField.setText(st); while (!btnpressed) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }); thread.start(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д