List of commits:
Subject Hash Author Date (UTC)
fixed gui problems 0688b215d9601d49a00aebc0732164216fe4a2f4 SF2311 2018-05-03 10:48:19
improved visualization, added thread safety 89adf0d0bfe610fde9199ec8145c5d8a91fae33f SF2311 2018-05-02 08:48:40
implemented first version of visualization a218089ef758c0fd525d3bbe16163d71eb4c6833 SF2311 2018-04-25 20:32:26
implemented first version of 2-opt-change algorithm 376954bfb1e24116e0935d70263c0ec0c2792b92 SF2311 2018-04-25 16:29:06
just to update 2fa820634306068c8a97315ecb29661604bb34dc SF2311 2018-04-25 14:21:33
Merge branch 'dev' of T:\GIPS\Klassen\2017_GIPS_J1\Informatik JB\ts into dev 0fa550b00774b011f7e87ef1ac5b8fbdb9abb0bc ani.moosb 2018-04-25 13:25:48
prepared data structure ad7e293e1679e05d274ebcacf043522c2f3e8f5c SF2311 2018-04-25 13:21:54
new class Algorythm to implement BrutForce algorithm cd2f3565cc145dd9f14290b727f74ea0281ef2c7 ani.moosb 2018-04-25 13:12:14
prepared data structure 0d55315b39e973974793aadfc188dc9e055ef029 SF2311 2018-04-25 13:10:50
added class City for represnetation of data 057841348e42a9bf916d6b5bf8d8f069a8e4f555 SF2311 2018-04-25 12:42:18
new class Algorythm to implement BrutForce algorithm c0ba57e67447133ed5b2fcde4cc9c6a2c61a1036 ani.moosb 2018-04-25 12:29:31
Fixed menu loading problems 9858b4b11fd912d8b40e681b772bf0ef16678ca6 SF2311 2018-04-20 17:07:20
Added Menu loading 428354d568e6bf97e45ec4c416ce9b3db227eea4 SF2311 2018-04-20 16:12:55
designed main window added launching main window added first menu part in form of gridpane 1f4e52733f4aeb9524fb0f40f8cf7604aaf17898 SF2311 2018-04-19 16:15:30
prepared User interface cfad65413554fbd7a1026f2c8e73e73e996df69d SF2311 2018-04-18 18:51:26
initial commit 272ab94837f2e39f77b768df08a25a78466d52d1 SF2311 2018-04-18 18:43:17
Commit 0688b215d9601d49a00aebc0732164216fe4a2f4 - fixed gui problems
Author: SF2311
Author date (UTC): 2018-05-03 10:48
Committer name: SF2311
Committer date (UTC): 2018-05-03 10:48
Parent(s): 89adf0d0bfe610fde9199ec8145c5d8a91fae33f
Signing key:
Tree: c0350b3c5d28fca12164f9ea60ae8d1ecc84b4c5
File Lines added Lines deleted
src/salesman/algorithms/Opt2.java 5 2
src/salesman/data/ObservableBoolean.java 1 0
src/salesman/data/Order.java 2 0
src/salesman/ui/MainWindow.fxml 1 1
src/salesman/ui/MainWindowController.java 45 30
File src/salesman/algorithms/Opt2.java changed (mode: 100644) (index f39b24d..c5ebabf)
... ... public class Opt2 extends Thread {
15 15 @Override @Override
16 16
17 17 public void run() { public void run() {
18
18 19 MainWindowController.data.setAlgorithmRunning(true); MainWindowController.data.setAlgorithmRunning(true);
19 20 int count = 0; int count = 0;
20 int concelCondition= MainWindowController.data.getCities().length*10;
21 double cancelCondition= MainWindowController.data.getCities().length*MainWindowController.data.getCities().length-1;
21 22 currentOrder = Order.getRandomOrder(MainWindowController.data.getCities()); currentOrder = Order.getRandomOrder(MainWindowController.data.getCities());
22 while (count<concelCondition) {
23 while (count<cancelCondition) {
23 24 if(isInterrupted()){ if(isInterrupted()){
24 25 MainWindowController.data.setAlgorithmRunning(false); MainWindowController.data.setAlgorithmRunning(false);
25 26 return; return;
 
... ... public class Opt2 extends Thread {
28 29 int index1 = r.nextInt(currentOrder.getSize()), index2 = r.nextInt(currentOrder.getSize()); int index1 = r.nextInt(currentOrder.getSize()), index2 = r.nextInt(currentOrder.getSize());
29 30 currentOrder.swapValues(index1, index2); currentOrder.swapValues(index1, index2);
30 31 MainWindowController.data.getCurrentOrder().setOrder(currentOrder.getOrder()); MainWindowController.data.getCurrentOrder().setOrder(currentOrder.getOrder());
32 System.out.println("change: "+System.currentTimeMillis());
31 33 if (currentOrder.getTotalLength() < currentLength) { if (currentOrder.getTotalLength() < currentLength) {
32 34 MainWindowController.data.setBestEver(currentOrder); MainWindowController.data.setBestEver(currentOrder);
33 35 count =0; count =0;
 
... ... public class Opt2 extends Thread {
44 46 } }
45 47 } }
46 48 } }
49 MainWindowController.data.getCurrentOrder().setOrder(null);
47 50 MainWindowController.data.setAlgorithmRunning(false); MainWindowController.data.setAlgorithmRunning(false);
48 51 } }
49 52
File src/salesman/data/ObservableBoolean.java changed (mode: 100644) (index 4c9bb02..7bd2d04)
1 1 package salesman.data; package salesman.data;
2 2
3 import javafx.application.Platform;
3 4 import javafx.beans.InvalidationListener; import javafx.beans.InvalidationListener;
4 5 import javafx.beans.value.ChangeListener; import javafx.beans.value.ChangeListener;
5 6 import javafx.beans.value.ObservableBooleanValue; import javafx.beans.value.ObservableBooleanValue;
File src/salesman/data/Order.java changed (mode: 100644) (index 2d29cd8..1fd039b)
... ... public class Order {
55 55 } }
56 56
57 57 public int[] getOrder() { public int[] getOrder() {
58 if(!(order==null))
58 59 return order.clone(); return order.clone();
60 return null;
59 61 } }
60 62
61 63 public void setOrder(int[] order){ public void setOrder(int[] order){
File src/salesman/ui/MainWindow.fxml changed (mode: 100644) (index ea24b5f..ae4836a)
38 38 </rowConstraints> </rowConstraints>
39 39 <children> <children>
40 40 <Label text="Anzahl Städte" /> <Label text="Anzahl Städte" />
41 <TextField fx:id="txtFieldNumCities" text="10" GridPane.columnIndex="1" />
41 <TextField fx:id="txtFieldNumCities" onAction="#btnNewCities" text="10" GridPane.columnIndex="1" />
42 42 <ComboBox fx:id="cBalgorithm" onAction="#cBalgorithmOnAction" prefWidth="150.0" promptText="Algorithmus" GridPane.columnSpan="2" GridPane.halignment="CENTER" GridPane.rowIndex="1" /> <ComboBox fx:id="cBalgorithm" onAction="#cBalgorithmOnAction" prefWidth="150.0" promptText="Algorithmus" GridPane.columnSpan="2" GridPane.halignment="CENTER" GridPane.rowIndex="1" />
43 43 <Button fx:id="btnNewCities" mnemonicParsing="false" onAction="#btnNewCities" text="Städte neu" GridPane.rowIndex="2" /> <Button fx:id="btnNewCities" mnemonicParsing="false" onAction="#btnNewCities" text="Städte neu" GridPane.rowIndex="2" />
44 44 </children> </children>
File src/salesman/ui/MainWindowController.java changed (mode: 100644) (index f6247b3..3822929)
1 1 package salesman.ui; package salesman.ui;
2 2
3 import javafx.application.Platform;
3 4 import javafx.beans.value.ChangeListener; import javafx.beans.value.ChangeListener;
4 5 import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
5 6 import javafx.collections.FXCollections; import javafx.collections.FXCollections;
 
... ... public class MainWindowController {
117 118 } }
118 119
119 120
120 private class RepaintListener implements ChangeListener<Boolean> {
121 private class RepaintListener extends Thread implements ChangeListener<Boolean> {
122 boolean newValue;
121 123
122 124 @Override @Override
123 public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
125 public void run(){
126 System.out.println("paint: "+System.currentTimeMillis());
124 127 int numCities = getNumOfCities(); int numCities = getNumOfCities();
125 128 Order currentOrder = data.getCurrentOrder(); Order currentOrder = data.getCurrentOrder();
126 129 if (newValue) { if (newValue) {
127 130 GraphicsContext gc = canvasCities.getGraphicsContext2D(); GraphicsContext gc = canvasCities.getGraphicsContext2D();
128 131 gc.clearRect(0, 0, canvasCities.getWidth(), canvasCities.getHeight()); gc.clearRect(0, 0, canvasCities.getWidth(), canvasCities.getHeight());
129 gc.setStroke(new Color(0, 0, 0, 1));
130 gc.setLineWidth(1);
131 gc.setFill((Color.GRAY));
132 for (int i = 0; i < currentOrder.getSize(); i++) {
133 City current = data.getCities()[currentOrder.getValue(i)];
134 City next;
135 if ((i + 1) > numCities - 1) {
136 next = data.getCities()[currentOrder.getValue(0)];
137 } else {
138 next = data.getCities()[currentOrder.getValue(i + 1)];
139 }
140
141
142
143 gc.fillOval(current.getX() - 5, current.getY() - 5, 10, 10);
144 gc.strokeLine(current.getX(), current.getY(), next.getX(), next.getY());
145
146 }
147
148 if(!(data.getBestEver()==null)) {
149 Order best = data.getBestEver();
150 gc.setStroke(new Color(1, 0, 0, 1));
151 gc.setLineWidth(3);
132 if(!(currentOrder.getOrder()==null)) {
133 gc.setStroke(new Color(0, 0, 0, 1));
134 gc.setLineWidth(1);
152 135 gc.setFill((Color.GRAY)); gc.setFill((Color.GRAY));
153 for (int i = 0; i < best.getSize(); i++) {
154 City current = data.getCities()[best.getValue(i)];
136 for (int i = 0; i < currentOrder.getSize(); i++) {
137 City current = data.getCities()[currentOrder.getValue(i)];
155 138 City next; City next;
156 139 if ((i + 1) > numCities - 1) { if ((i + 1) > numCities - 1) {
157 next = data.getCities()[best.getValue(0)];
140 next = data.getCities()[currentOrder.getValue(0)];
158 141 } else { } else {
159 next = data.getCities()[best.getValue(i + 1)];
142 next = data.getCities()[currentOrder.getValue(i + 1)];
160 143 } }
161 144
162 145
 
... ... public class MainWindowController {
165 148
166 149 } }
167 150 } }
168 repaint.set(false);
151
152
153 if (!(data.getBestEver() == null)) {
154 if (!(data.getBestEver().getOrder() == null)) {
155 Order best = data.getBestEver();
156 gc.setStroke(new Color(1, 0, 0, 1));
157 gc.setLineWidth(3);
158 gc.setFill((Color.GRAY));
159 for (int i = 0; i < best.getSize(); i++) {
160 City current = data.getCities()[best.getValue(i)];
161 City next;
162 if ((i + 1) > numCities - 1) {
163 next = data.getCities()[best.getValue(0)];
164 } else {
165 next = data.getCities()[best.getValue(i + 1)];
166 }
167
168
169 gc.fillOval(current.getX() - 5, current.getY() - 5, 10, 10);
170 gc.strokeLine(current.getX(), current.getY(), next.getX(), next.getY());
171
172 }
173 repaint.set(false);
174 }
175 }
169 176 } }
170 177 } }
178
179 @Override
180 public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
181 this.newValue=newValue;
182 Platform.runLater(this);
183 }
171 184 } }
185
172 186 } }
187
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/SF2311/travelling-salesman

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/SF2311/travelling-salesman

Clone this repository using git:
git clone git://git.rocketgit.com/user/SF2311/travelling-salesman

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main