changeset 4:50d77513d52e

Platform runLater must use for handling instance from other thread (Not on FX application thread )
author e095732
date Mon, 28 Jan 2013 00:22:17 +0900
parents 4930f8daf49d
children 1245abe6625f
files src/alice/test/topology/aquarium/fx/AddObject.java src/alice/test/topology/aquarium/fx/Aquarium.java src/alice/test/topology/aquarium/fx/AquariumController.java src/alice/test/topology/aquarium/fx/SetTranslation.java src/alice/test/topology/aquarium/fx/UpdateData.java
diffstat 5 files changed, 107 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/src/alice/test/topology/aquarium/fx/AddObject.java	Sat Jan 26 20:34:13 2013 +0900
+++ b/src/alice/test/topology/aquarium/fx/AddObject.java	Mon Jan 28 00:22:17 2013 +0900
@@ -1,14 +1,15 @@
 package alice.test.topology.aquarium.fx;
 
-import example.SetTranslation;
+import java.util.Random;
 
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
+import javafx.application.Platform;
 import javafx.collections.ObservableList;
 import javafx.scene.Node;
 import javafx.scene.paint.Color;
-import javafx.scene.shape.Rectangle;
+import javafx.scene.shape.RectangleBuilder;
 
 public class AddObject extends CodeSegment{
 	
@@ -17,37 +18,37 @@
 	
 	public AddObject(Aquarium aqua){
 		list = aqua.getList();
-		data.setKey("local", "objlist");
+		data.setKey("objCnt");
 	}
 
 	@Override
 	public void run() {
-		ObjectList objlist = data.asClass(ObjectList.class);
-		list.addAll(objlist.list);
-	
+		Platform.runLater(new Runnable() {
+			public void run() {
+				int num = data.asInteger();
+				double size = 75;
+				Color color = Color.RED;
+				Random rnd = new Random();
+				ObjectList obj = new ObjectList();
+				for (int i = 0;i < num; i++){
+					obj.list.add(RectangleBuilder.create()
+							.width(size).height(size)
+							.fill(color.deriveColor(0.0, 1.0, 1.0, 1.0))
+							.translateX(rnd.nextInt(600))
+							.translateY(rnd.nextInt(600))
+							.translateZ(0)
+							.id("FISH"+i)
+							.build());
+				}
+				for (int i = 0;i < num; i++){
+					new SetTranslation(obj.list.get(i), "FISH"+i);
+					list.add(obj.list.get(i));
+				}
+				System.out.println("Create OBJ " + num);
+				System.out.println(list);
+			}
+		});
 	}
 	
-	public void test(Aquarium aqua){
-		ObservableList<Node> list = aqua.getList();
-		final Rectangle rect = new Rectangle(0, 0, 50, 50);
-		rect.setArcHeight(20);
-		rect.setArcWidth(20);
-		rect.setFill(Color.DODGERBLUE);
-		
-		final Rectangle rect1 = new Rectangle(0, 0, 50, 50);
-		rect1.setArcHeight(20);
-		rect1.setArcWidth(20);
-		rect1.setFill(Color.GREEN);
-		
-		rect1.setTranslateX(500);
-		rect1.setTranslateY(500);
-		new SetTranslation(rect, "image2"); // set
-		ObjectList objlist = new ObjectList();
-		objlist.list.add(rect);
-		objlist.list.add(rect1);
-		
-		list.addAll(objlist.list);
-		System.out.println(list);
-	}
 }
 
--- a/src/alice/test/topology/aquarium/fx/Aquarium.java	Sat Jan 26 20:34:13 2013 +0900
+++ b/src/alice/test/topology/aquarium/fx/Aquarium.java	Mon Jan 28 00:22:17 2013 +0900
@@ -2,7 +2,6 @@
 
 import java.io.IOException;
 
-import example.SetTranslation;
 
 import javafx.application.Application;
 import javafx.collections.ObservableList;
@@ -19,23 +18,19 @@
 public class Aquarium extends Application {
 
 	private ObservableList<Node> list;
+	public AnchorPane root;
 	
 	@Override
 	public void start(Stage primaryStage) throws IOException {
-		FXMLLoader loader = new FXMLLoader();
-		AnchorPane root = loader.load(getClass().getResource("aquarium.fxml"));
+		root = FXMLLoader.load(getClass().getResource("aquarium.fxml"));
 		// AquariumController cont = (AquariumController) loader.getController(); get Controller instance
-		System.out.println(root.getChildren().get(1).getId());
 		ImageView iv = (ImageView) root.getChildren().get(3);
 		Image img = new Image("fish.jpg");
 		iv.setImage(img);
 		list = root.getChildren();
-		System.out.println(list.toString());
 		new SetTranslation(iv, "image1");
 		Scene scene = new Scene(root);
         
-        new AddObject(this);
-        
         primaryStage.setScene(scene);
         primaryStage.setResizable(false);
         primaryStage.show();
@@ -44,6 +39,8 @@
             	System.exit(0);
             }
         });
+        
+        new AddObject(this);
 	}
 
 	public static void main(String[] args) {
--- a/src/alice/test/topology/aquarium/fx/AquariumController.java	Sat Jan 26 20:34:13 2013 +0900
+++ b/src/alice/test/topology/aquarium/fx/AquariumController.java	Mon Jan 28 00:22:17 2013 +0900
@@ -1,6 +1,5 @@
 package alice.test.topology.aquarium.fx;
 
-import example.UpdateData;
 import javafx.fxml.FXML;
 import javafx.scene.control.TextField;
 import javafx.scene.image.ImageView;
@@ -15,18 +14,7 @@
 	@FXML private ImageView image;
 	
 	public AquariumController(){
-		System.out.println("run app");
-		
-	}
-	
-	@FXML
-	public void PressedKey1(KeyEvent ke){
-		
-	}
-	
-	@FXML
-	public void PressedKey2(KeyEvent ke){
-		
+		System.out.println("run JavaFX");	
 	}
 	
 	@FXML
@@ -34,23 +22,15 @@
 		switch (ke.getCode()){
 		case RIGHT:
 			new UpdateData("image1", new FishData(image.getTranslateX()+10,image.getTranslateY(),image.getTranslateZ())).execute();
-			new UpdateData("image2", new FishData(image.getTranslateX()+10,image.getTranslateY(),image.getTranslateZ())).execute();
-			// rect1.setTranslateX(rect1.getTranslateX()+10.0);
 			break;
 		case LEFT:
 			new UpdateData("image1", new FishData(image.getTranslateX()-10,image.getTranslateY(),image.getTranslateZ())).execute();
-			new UpdateData("image2", new FishData(image.getTranslateX()-10,image.getTranslateY(),image.getTranslateZ())).execute();			
-			// rect1.setTranslateX(rect1.getTranslateX()-10.0);
 			break;
 		case UP:
 			new UpdateData("image1", new FishData(image.getTranslateX(),image.getTranslateY()-10,image.getTranslateZ())).execute();
-			new UpdateData("image2", new FishData(image.getTranslateX(),image.getTranslateY()-10,image.getTranslateZ())).execute();
-			// rect1.setTranslateY(rect1.getTranslateY()-10.0);
 			break;
 		case DOWN:
 			new UpdateData("image1", new FishData(image.getTranslateX(),image.getTranslateY()+10,image.getTranslateZ())).execute();
-			new UpdateData("image2", new FishData(image.getTranslateX(),image.getTranslateY()+10,image.getTranslateZ())).execute();
-			// rect1.setTranslateY(rect1.getTranslateY()+10.0);
 			break;
 		default:
 			break;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/alice/test/topology/aquarium/fx/SetTranslation.java	Mon Jan 28 00:22:17 2013 +0900
@@ -0,0 +1,54 @@
+package alice.test.topology.aquarium.fx;
+
+import javafx.scene.image.ImageView;
+import javafx.scene.shape.Rectangle;
+import alice.codesegment.CodeSegment;
+import alice.datasegment.CommandType;
+import alice.datasegment.Receiver;
+
+public class SetTranslation extends CodeSegment {
+	
+	private Receiver data = ids.create(CommandType.PEEK);
+	private ImageView image;
+	private Rectangle rect;
+	
+	public SetTranslation(ImageView image, String key){
+		this.image = image;
+		data.setKey(key);
+	} 
+	
+	public SetTranslation(ImageView image, String key, int index) {
+		this.image = image;
+		data.setKey(key, index);
+	}
+
+	public SetTranslation(Rectangle rect, String key){
+		this.rect = rect;
+		data.setKey(key);
+	} 
+	
+	public SetTranslation(Rectangle rect, String key, int index) {
+		this.rect = rect;
+		data.setKey(key, index);
+	}
+	
+	@Override
+	public void run() {
+		FishData fd = data.asClass(FishData.class);
+		if (image!=null){
+			image.setTranslateX(fd.x);
+			image.setTranslateY(fd.y);
+			image.setTranslateZ(fd.z);
+
+			new SetTranslation(image, data.key, data.index);
+		} else if (rect != null){
+			rect.setTranslateX(fd.x);
+			rect.setTranslateY(fd.y);
+			rect.setTranslateZ(fd.z);
+
+			new SetTranslation(rect, data.key, data.index);
+		}
+
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/alice/test/topology/aquarium/fx/UpdateData.java	Mon Jan 28 00:22:17 2013 +0900
@@ -0,0 +1,19 @@
+package alice.test.topology.aquarium.fx;
+
+import alice.codesegment.CodeSegment;
+
+public class UpdateData extends CodeSegment {
+	
+	private String key;
+	private FishData fd;
+	
+	public UpdateData(String key, FishData fd){
+		this.key = key;
+		this.fd = fd;
+	}
+
+	@Override
+	public void run() {
+		ods.update("local", this.key, fd);
+	}
+}