From 9cebaa900f8ca8535da1813d20aa98da48b826db Mon Sep 17 00:00:00 2001 From: Leon Dieter <Leon Dieter@DESKTOP-L4JC8N4> Date: Tue, 20 Apr 2021 18:37:50 +0200 Subject: [PATCH] minor changes --- UML.dia | Bin 19992 -> 20127 bytes .../ardublock/simulator/Simulator.java | 20 +++--- .../ardublock/simulator/view/GUI.java | 61 ++++++++++-------- .../simulator/view/modules/ArduinoUno.java | 10 ++- .../simulator/view/modules/Button.java | 27 +++++--- .../simulator/view/modules/Modul.java | 9 +-- .../simulator/view/modules/Poti.java | 10 ++- .../ardublock/simulator/view/modules/RGB.java | 17 +++-- 8 files changed, 95 insertions(+), 59 deletions(-) diff --git a/UML.dia b/UML.dia index 6f33a4c400cee424817c34093c0c7f55ad92a964..c30ba857e61c2a94a2541f847d2e4ae08143bfa3 100644 GIT binary patch literal 20127 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 literal 19992 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 diff --git a/src/tec/letsgoing/ardublock/simulator/Simulator.java b/src/tec/letsgoing/ardublock/simulator/Simulator.java index 9a75e78..1dd9344 100644 --- a/src/tec/letsgoing/ardublock/simulator/Simulator.java +++ b/src/tec/letsgoing/ardublock/simulator/Simulator.java @@ -40,14 +40,17 @@ import tec.letsgoing.ardublock.simulator.view.GUI; * */ public class Simulator implements Runnable, ActionListener{ + + private static final int X_SCALE = 800; + private static final int Y_SCALE = 800; + private static Simulator instance; private Arduino arduino; private GUI gui; private Thread guiThread; private Thread simuThread; private Vector<SimCodeFunction> functionsCode = new Vector<SimCodeFunction>(); - private final int xscale = 800; - private final int yscale = 800; + /** * Privater Konstruktor der Klasse Simulator<br> * Die Klasse ist als Singelton geschrieben, daher sollte diese Konstruktor nie @@ -67,7 +70,7 @@ public class Simulator implements Runnable, ActionListener{ } catch (UnsupportedLookAndFeelException e) { e.printStackTrace(); } - createSubClasses(xscale, yscale); + createSubClasses(X_SCALE, Y_SCALE, null); } @@ -95,8 +98,8 @@ public class Simulator implements Runnable, ActionListener{ * * @return true */ - private boolean createSubClasses(int _xscale, int _yscale) { - gui = new GUI(this, _xscale, _yscale); + private boolean createSubClasses(int _xscale, int _yscale, Point _windowLocation) { + gui = new GUI(this, _xscale, _yscale, _windowLocation); arduino = new Arduino(gui); gui.connectPins(arduino); @@ -179,9 +182,8 @@ public class Simulator implements Runnable, ActionListener{ Point locationWindow = gui.getLocation(); -// int widthWindow = ((int)((gui.getWidth() * 1.0975) - 13.307)); -// int heightWindow = ((int)((gui.getHeight() * 1.2709) - 174.77)); + //Bei unterschiedlicher //Die bisherige Größe des Fenster wird abgespeichert int widthWindow = gui.getWidth(); int heightWindow = gui.getHeight(); @@ -191,9 +193,9 @@ public class Simulator implements Runnable, ActionListener{ //Die neue Objekte werden mit den gespeicherten Werten erzeugt - createSubClasses(widthWindow, heightWindow); + createSubClasses(widthWindow, heightWindow, locationWindow); //die GUI wird an die gespeicherte Position verschoben - gui.setLocation(locationWindow); + for (SimCodeFunction function : functionsCode) { diff --git a/src/tec/letsgoing/ardublock/simulator/view/GUI.java b/src/tec/letsgoing/ardublock/simulator/view/GUI.java index d721bda..5e98f8f 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/GUI.java +++ b/src/tec/letsgoing/ardublock/simulator/view/GUI.java @@ -49,13 +49,23 @@ import tec.letsgoing.ardublock.simulator.view.modules.RGB; * */ public class GUI extends JFrame implements Runnable, ActionListener { + private static final int SCALING_OFFSET = 100; //wird für die Skalierung des Arduinos benötigt + private static final int UPDATE_GAP = 10; //Legt fest wie groß eine Fenstergrößenänderung sein muss um eine Fensteraktualisierungen durchzuführen private static final long serialVersionUID = 1L; - private static final int MAXIMUM_MESSAGES = 100; // Anzahl der Seriellen Nachrichten - private Vector<String> serialprint = new Vector<String>(); - private Modul[] modules = new Modul[4]; - private volatile boolean stopFlag = false; - private JTextArea serialLog = new JTextArea(); - private JPanel botControlPanel, topControlPanel, controlPanel, panel, topPanel; + private static final int MAXIMUM_MESSAGES = 100; // Anzahl der Seriellen Nachrichten + private static final int WINDOW_SIZE_MIN_X = 200; + private static final int WINDOW_SIZE_MIN_Y = 200; + + private Vector<String> serialprint = new Vector<String>(); + private Modul[] modules = new Modul[4]; + private volatile boolean stopFlag = false; + private JTextArea serialLog = new JTextArea(); + private JPanel botControlPanel; + private JPanel topControlPanel; + private JPanel controlPanel; + private JPanel panel; + private JPanel topPanel; + private JPanel modulPanel; private JButton goButton; private JButton stopButton; private JButton reloadButton; @@ -63,13 +73,11 @@ public class GUI extends JFrame implements Runnable, ActionListener { private JButton clearButton; private JCheckBox checkBox; private JScrollPane scrollPane; + private Container mainPane; private int xscale; private int yscale; - private JPanel modulPanel; - private Container mainPane; - private int windowHeight, windowWidth; - private final int scalingOffset = 100; //wird für die Skalierung des Arduinos benötigt - private final int updateGap = 10; //Legt fest wie groß eine Fenstergrößenänderung sein muss um eine Fensteraktualisierungen durchzuführen + private int windowHeight; + private int windowWidth; /** @@ -77,18 +85,18 @@ public class GUI extends JFrame implements Runnable, ActionListener { * * @param simu Instanz des Simulators */ - public GUI(Simulator simu, int _xscale, int _yscale) { + public GUI(Simulator simu, int _xscale, int _yscale, Point _windowLocation) { super("ArduBlock Simulator"); //Das Fenster wird gemäß des kleineren Seitenverhältnisses erstellt - if(_xscale <= _yscale - scalingOffset) { + if(_xscale <= _yscale - SCALING_OFFSET) { xscale = _xscale; yscale = _xscale; } else { - xscale = _yscale - scalingOffset; - yscale = _yscale - scalingOffset; + xscale = _yscale - SCALING_OFFSET; + yscale = _yscale - SCALING_OFFSET; } @@ -97,7 +105,7 @@ public class GUI extends JFrame implements Runnable, ActionListener { // Konstruktor der Module modules[0] = new RGB(new ImageIcon(getToolkit() - .getImage(GUI.class.getResource("/tec/letsgoing/ardublock/simulator/img/PM31_RGB_LED.png"))), xscale, yscale); + .getImage(GUI.class.getResource("/tec/letsgoing/ardublock/simulator/img/PM31_RGB_LED.png"))), xscale, yscale); modules[1] = new Button( new ImageIcon(getToolkit() .getImage(GUI.class.getResource("/tec/letsgoing/ardublock/simulator/img/PM26_Taster.png"))), @@ -146,12 +154,15 @@ public class GUI extends JFrame implements Runnable, ActionListener { //mainPane.add(createControlPanel(simu), BorderLayout.EAST); mainPane.add(createSerialLog(), BorderLayout.PAGE_END); - //Die Fenstergröße wird mit der dem Konstruktor übergebenen Größe festgelegt - super.setSize(_xscale, _yscale); + if(_windowLocation != null) { + setLocation(_windowLocation); + } + //Die Fenstergröße wird mit der dem Konstruktor übergebenen Größe festgelegt + setSize(_xscale, _yscale); //Eine Minimum Fenstergröße wird festgelegt - super.setMinimumSize(new Dimension(200, 200)); + setMinimumSize(new Dimension(WINDOW_SIZE_MIN_X, WINDOW_SIZE_MIN_Y)); // this.setLocation(-1300, 0); //Möglichkeit die Renderingposition festzulegen - super.setVisible(true); + setVisible(true); //Eine Aktualisierung der GUI gemäß den übergebenen Seitenverhältnissen wird aufgerufen. updateGUI(xscale, yscale); @@ -161,12 +172,10 @@ public class GUI extends JFrame implements Runnable, ActionListener { @Override public void componentResized(ComponentEvent e) { - - //Das Fenster soll erst dann upgedatet werden wenn eine Größenänderung größer 5 stattgefunden hat //um zu verhindern dass die update Funktion durch ein zu häufiges Aufrufen das Programm aufhängt. - if((Math.abs(windowHeight - getHeight()) > updateGap) || (Math.abs(windowWidth - getWidth()) > updateGap)) { + if((Math.abs(windowHeight - getHeight()) > UPDATE_GAP) || (Math.abs(windowWidth - getWidth()) > UPDATE_GAP)) { //Die aktuelle Fenstergröße wird abgespeichert windowHeight = getHeight(); @@ -174,13 +183,13 @@ public class GUI extends JFrame implements Runnable, ActionListener { //GUI wird nur gleichmäßig skaliert mit den Größen des kleineren Seitenverhätlnisses - if(windowWidth <= windowHeight - scalingOffset) { + if(windowWidth <= windowHeight - SCALING_OFFSET) { xscale = windowWidth; yscale = windowWidth; } else { - xscale = windowHeight - scalingOffset; - yscale = windowHeight - scalingOffset; + xscale = windowHeight - SCALING_OFFSET; + yscale = windowHeight - SCALING_OFFSET; } //GUI wird upgedatet diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java b/src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java index ecd5835..8547bff 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java +++ b/src/tec/letsgoing/ardublock/simulator/view/modules/ArduinoUno.java @@ -29,9 +29,13 @@ import tec.letsgoing.ardublock.simulator.view.GUI; public class ArduinoUno extends Modul { Arduino arduino; private boolean ledOn; - private int led13 = 0; - private JLabel labelPower, chiplabel, label13, labelButton; - private ImageIcon chipIcon, chipIcon_temp; + private int led13 = 0; + private JLabel labelPower; + private JLabel chiplabel; + private JLabel label13; + private JLabel labelButton; + private ImageIcon chipIcon; + private ImageIcon chipIcon_temp; private JButton button; diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java b/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java index 6f88c15..1d43062 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java +++ b/src/tec/letsgoing/ardublock/simulator/view/modules/Button.java @@ -27,22 +27,33 @@ import tec.letsgoing.ardublock.simulator.arduino.Pin; * */ public class Button extends Modul implements ActionListener, MouseListener { - private int[] lastState = { 0, 0, 0 }; - private ImageIcon iconOff, iconOn, chipIcon, chipIcon_temp, iconOff_temp, iconOn_temp; + private int[] lastState = { 0, 0, 0 }; + private ImageIcon iconOff; + private ImageIcon iconOn; + private ImageIcon chipIcon; + private ImageIcon chipIcon_temp; + private ImageIcon iconOff_temp; + private ImageIcon iconOn_temp; //private JToggleButton but1, but2, but3; - private JLabel chiplabel, label1, label2, label3; - private LockButton but1, but2, but3; + private JLabel chiplabel; + private JLabel label1; + private JLabel label2; + private JLabel label3; + private LockButton but1; + private LockButton but2; + private LockButton but3; + private class LockButton extends JButton { private static final long serialVersionUID = 1L; - private boolean clicked = false; - private boolean locked = false; + private boolean clicked = false; + private boolean locked = false; private int pin; - private int value = 0; - private static final String BTN_TOOLTIP = "Linksklick -> Taster | Rechtsklick -> Schalter"; + private int value = 0; + private static final String BTN_TOOLTIP = "Linksklick -> Taster | Rechtsklick -> Schalter"; LockButton(int _pin){//ImageIcon _iconOn, ImageIcon _iconOff){ pin = _pin; diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java b/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java index 18c9b59..beaf002 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java +++ b/src/tec/letsgoing/ardublock/simulator/view/modules/Modul.java @@ -20,12 +20,13 @@ import tec.letsgoing.ardublock.simulator.arduino.Pin; * */ public abstract class Modul implements Observer { - private boolean active = true; + private boolean active = true; private Point position; - protected Vector<Pin> pins = new Vector<Pin>(); + protected Vector<Pin> pins = new Vector<Pin>(); protected JLayeredPane layerpane = new JLayeredPane(); - protected Vector<Point> pinPos = new Vector<Point>(); - protected int xscale, yscale; + protected Vector<Point> pinPos = new Vector<Point>(); + protected int xscale; + protected int yscale; public void setState(boolean State) { active = State; diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java b/src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java index 496c10f..72af13c 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java +++ b/src/tec/letsgoing/ardublock/simulator/view/modules/Poti.java @@ -30,10 +30,14 @@ import tec.letsgoing.ardublock.simulator.view.GUI; * */ public class Poti extends Modul implements ChangeListener, MouseWheelListener { - int value = 0; + int value = 0; private JSlider slider; - private JLabel chiplabel, sliderlabel1, sliderlabel2, sliderlabel3; - private ImageIcon chipIcon, chipIcon_temp; + private JLabel chiplabel; + private JLabel sliderlabel1; + private JLabel sliderlabel2; + private JLabel sliderlabel3; + private ImageIcon chipIcon; + private ImageIcon chipIcon_temp; private JPanel sliderPanel; private Hashtable<Integer, JLabel> labelTable; diff --git a/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java b/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java index 9627774..dbd6b04 100644 --- a/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java +++ b/src/tec/letsgoing/ardublock/simulator/view/modules/RGB.java @@ -25,12 +25,17 @@ import tec.letsgoing.ardublock.simulator.view.GUI; * */ public class RGB extends Modul { - private int redValue = 0; - private int greenValue = 0; - private int blueValue = 0; - private int transparancy, tredValue, tgreenValue, tblueValue; - private JLabel chiplabel, ledlabel; - private ImageIcon chipIcon, chipIcon_temp; + private int redValue = 0; + private int greenValue = 0; + private int blueValue = 0; + private int transparancy; + private int tredValue; + private int tgreenValue; + private int tblueValue; + private JLabel chiplabel; + private JLabel ledlabel; + private ImageIcon chipIcon; + private ImageIcon chipIcon_temp; public RGB(ImageIcon _icon, int _xscale, int _yscale) { -- GitLab