From 714e40463c982ebc04cdf7addb0e97cc2160ef2d Mon Sep 17 00:00:00 2001 From: hugh5 Date: Wed, 2 Nov 2022 02:05:10 +1000 Subject: [PATCH] added user input for array --- src/MainWindow.java | 17 +++++++------ src/MenuPanel.java | 53 +++++++++++++++++++++++++++++++++++++++++ src/SortingPanel.java | 32 ++++++++++++++----------- src/assets/divider.png | Bin 0 -> 2294 bytes src/assets/upload.png | Bin 0 -> 4729 bytes 5 files changed, 81 insertions(+), 21 deletions(-) create mode 100644 src/assets/divider.png create mode 100644 src/assets/upload.png diff --git a/src/MainWindow.java b/src/MainWindow.java index f6d1f70..8e0438f 100644 --- a/src/MainWindow.java +++ b/src/MainWindow.java @@ -4,13 +4,14 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.Arrays; public class MainWindow implements ActionListener, ChangeListener { private final JFrame window; private MenuPanel menuPanel; private SortingPanel sortingPanel; public static final int MAX = 64; - public static final int MIN = 2; + public static final int MIN = 1; public MainWindow() { @@ -49,12 +50,14 @@ public void show() { @Override public void actionPerformed(ActionEvent e) { System.out.println(e); - if (e.getSource() instanceof JButton) { - if (e.getActionCommand().equals("generate")) { - sortingPanel.generateArray(); - } else if (e.getActionCommand().equals("start")) { - sortingPanel.start(menuPanel.getSortingMethod()); - } + if (e.getActionCommand().equals("generate")) { + sortingPanel.generateArray(); + } else if (e.getActionCommand().equals("upload")) { + int[] array = menuPanel.getArray(); + menuPanel.getLength().setValue(array.length); + sortingPanel.setArray(array); + } else if (e.getActionCommand().equals("start")) { + sortingPanel.start(menuPanel.getSortingMethod()); } } diff --git a/src/MenuPanel.java b/src/MenuPanel.java index d71902c..1587dc6 100644 --- a/src/MenuPanel.java +++ b/src/MenuPanel.java @@ -11,6 +11,9 @@ public class MenuPanel { private JSlider length; private JLabel lengthLabel; private JComboBox sortingMethod; + private JButton upload; + private JTextField setArray; + private JButton start; private JButton forward; private JButton backward; @@ -44,6 +47,35 @@ private void createNorthPanel() { northPanel.add(lengthLabel); lengthLabel.setText("Length:" + length.getValue()); + URL dividerURL = getClass().getResource("assets/divider.png"); + ImageIcon dividerIcon = null; + if (dividerURL != null) { + dividerIcon = new ImageIcon(dividerURL); + dividerIcon = new ImageIcon(dividerIcon.getImage().getScaledInstance(20, 20, Image.SCALE_DEFAULT)); + northPanel.add(new JLabel(dividerIcon)); + } else { + northPanel.add(new JLabel("|")); + } + + URL uploadURL = getClass().getResource("assets/upload.png"); + if (uploadURL != null) { + ImageIcon uploadIcon = new ImageIcon(uploadURL); + uploadIcon = new ImageIcon(uploadIcon.getImage().getScaledInstance(15, 15, Image.SCALE_DEFAULT)); + upload = new JButton("Set Array", uploadIcon); + } else { + upload = new JButton("Set Array"); + } + northPanel.add(upload); + + setArray = new JTextField(String.format("[%d, %d, %d]", MainWindow.MAX, MainWindow.MAX / 4, MainWindow.MAX / 2), 30); + northPanel.add(setArray); + + if (dividerIcon != null) { + northPanel.add(new JLabel(dividerIcon)); + } else { + northPanel.add(new JLabel("|")); + } + sortingMethod = new JComboBox<>(SortingMethod.values()); northPanel.add(sortingMethod); } @@ -98,6 +130,23 @@ public JPanel getSouthPanel() { return southPanel; } + public JSlider getLength () { + return length; + } + + public int[] getArray() { + String[] values = setArray.getText().replace("[","").replace("]","").split(","); + int[] array = new int[Math.min(values.length, MainWindow.MAX)]; + int i = 0; + for (String s : values) { + if (i > MainWindow.MAX) break; + try { + array[i++] = Integer.parseInt(s.strip()); + } catch (NumberFormatException ignored) {} + } + return array; + } + public SortingMethod getSortingMethod() { return (SortingMethod) sortingMethod.getSelectedItem(); } @@ -115,6 +164,10 @@ public void addChangeListeners(ChangeListener changeListener) { public void addActionListeners(ActionListener actionListener) { generate.setActionCommand("generate"); generate.addActionListener(actionListener); + upload.setActionCommand("upload"); + upload.addActionListener(actionListener); + setArray.setActionCommand("upload"); + setArray.addActionListener(actionListener); start.setActionCommand("start"); start.addActionListener(actionListener); diff --git a/src/SortingPanel.java b/src/SortingPanel.java index 6ddc007..faf70d0 100644 --- a/src/SortingPanel.java +++ b/src/SortingPanel.java @@ -11,7 +11,6 @@ public class SortingPanel extends JComponent { private Map map; private int[] array; private final Random r; - private int size; private int speed; private static final Color CURRENT = Color.ORANGE; @@ -20,28 +19,33 @@ public class SortingPanel extends JComponent { public SortingPanel() { r = new Random(System.nanoTime()); - size = MainWindow.MAX / 2; - generateArray(); - map = new HashMap<>(size); + generateArray(MainWindow.MAX / 2); speed = 5; } public void paint(Graphics g) { int y = getHeight() -20; int scalar = getHeight() / MainWindow.MAX - 1; - int width = Math.min(getWidth() / size, 100); + int width = Math.min(getWidth() / array.length, 100); g.setFont(new Font("Monospaced", Font.PLAIN, 16)); - for (int i = 0; i < size; i++) { - g.setColor(Color.BLACK); - g.drawString(String.valueOf(array[i]), (int) i * width + width / 4, y + 15); + for (int i = 0; i < array.length; i++) { g.setColor(map.get(i)); g.fillRect(i * width, y, width - 2, -scalar * array[i]); + g.setColor(Color.BLACK); + g.drawString(String.valueOf(array[i]), (int) i * width + width / 4, y + 15); } } + public void setArray(int[] array) { + this.array = array; + map = new HashMap<>(array.length); + System.out.println(Arrays.toString(array)); + this.repaint(); + } + public void generateArray(int size) { - this.size = size; - IntStream ints = r.ints(size, 1, MainWindow.MAX); + size = Math.min(Math.max(size, MainWindow.MIN), MainWindow.MAX); + IntStream ints = r.ints(size, MainWindow.MIN, MainWindow.MAX); array = ints.toArray(); map = new HashMap<>(size); System.out.println(Arrays.toString(array)); @@ -49,7 +53,7 @@ public void generateArray(int size) { } public void generateArray() { - generateArray(this.size); + generateArray(array.length); } public void start(SortingMethod sortingMethod) { @@ -77,10 +81,10 @@ public void updateScreen() { private void selectionSort() { map.clear(); int numSorted = 0; - for (int n = 0; n < size; n++) { + for (int n = 0; n < array.length; n++) { int minIndex = n; map.put(minIndex, MIN); - for (int i = numSorted; i < size; i++) { + for (int i = numSorted; i < array.length; i++) { if (array[i] < array[minIndex]) { map.remove(minIndex); map.put(i, MIN); @@ -108,7 +112,7 @@ private void selectionSort() { private void insertionSort() { map.clear(); map.put(0, SORTED); - for (int n = 1; n < size; n++) { + for (int n = 1; n < array.length; n++) { for (int i = n; i > 0; i--) { if (array[i] < array[i - 1]) { map.put(i - 1, MIN); diff --git a/src/assets/divider.png b/src/assets/divider.png new file mode 100644 index 0000000000000000000000000000000000000000..19e7cdd5643c94e3f14a2bff82113286f694008c GIT binary patch literal 2294 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4Yzkn1=v6E*A2N2Y7q;vrJoCO|{ z#S9EW=^)H#bz1K}P*AeOHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IX1_q8| zPZ!6KiaBquUF1DvAj0A}yUXLhtAo3~uY!9NaneQL^ zK4_2gmuFx&C(OVgpu)hQ;K9J)FoA)gL4lEh!4c@zCKjLrIe}&ijVc%ohtc#fnlDDn lhtYC!v^p5A79q`pyoqAmf7?O>D}ikk22WQ%mvv4FO#mJ5{C5BV literal 0 HcmV?d00001 diff --git a/src/assets/upload.png b/src/assets/upload.png new file mode 100644 index 0000000000000000000000000000000000000000..e4ae9dbc6c6690a78a2f45ad8a35ebf42cb54b36 GIT binary patch literal 4729 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 literal 0 HcmV?d00001