Java FXで、複数の図形を描写した後、ドラッグアンドドロップで動かす
というのを実現しようと思っているのですが。
どの図形をクリックしたかを管理する方法で悩んでいます。
該当のソースコード
package b012.libro;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.input.;
import javafx.scene.layout.;
import javafx.scene.shape.*;
import javafx.scene.control.Label;
import javafx.scene.paint.Color;
import javafx.scene.ImageCursor;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import java.io.File;
public class App extends Application {
Color cc = Color.YELLOW;
String Stb="Set Total Bolts:";
String Colorname ="きいろ";
Label label; int Boltno; int[] Boltx=new int[1000]; int[] Bolty=new int[1000]; Path[] p = new Path[1000]; public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) { label = new Label( Stb + Boltno+ " " + Colorname+ "/"); BorderPane root = new BorderPane(); String uri = new File("img/cursor.png").toURI().toString(); Image img = new Image( uri ); ImageCursor cursor = new ImageCursor( img , img.getWidth() / 2 , img.getHeight() ); root.setTop(label); Scene scene = new Scene(root,300,300); scene.setOnMouseClicked(event -> CreateBolt(root,event)); scene.setOnKeyPressed(event -> change(event)); scene.setCursor( cursor ); stage.setScene(scene); stage.setTitle("B012 TEST Ver0.5"); stage.show(); } public void Totalno(int xx,int yy){ String msg = Stb + Boltno+ " " + Colorname + "/" + "x:" + xx + "," + "y:" + yy; label.setText(msg); } public void CreateBolt(Pane root,MouseEvent event){ int x = (int)event.getX(); int y = (int)event.getY(); for(int i=0; i<Boltno; i++) { label.setText("set:"+i+ "x:" + Boltx[i] + "," + "y:" + Bolty[i]); if ( (Boltx[i]>x-20 && Boltx[i]<x+20) && (Bolty[i]>y-10 && Bolty[i]<y+10) ) { label.setText("Already set:"+i); return; } } Boltx[Boltno]=x; Bolty[Boltno]=y; Boltno++; int p[B]=Boltno; //Totalno(x,y); p[B] = new p(); MoveTo b00 = new MoveTo(x-20,y+0); p[B].getElements().add(b00); p[B]To b01 = new LineTo(x-10,y-10); path.getElements().add(b01); LineTo b02 = new LineTo(x+10,y-10); path.getElements().add(b02); LineTo b03 = new LineTo(x+20,y+0); p[B].getElements().add(b03); LineTo b04 = new LineTo(x+10,y+10); p[B].getElements().add(b04); LineTo b05 = new LineTo(x-10,y+10); p[B].getElements().add(b05); p[B].getElements().add(new ClosePath()); p[B].setFill(cc); p[B].setStroke(Color.BLACK); p[B].setStrokeWidth(2); root.getChildren().add(p[B]); } public void change(KeyEvent event){ KeyCode code = event.getCode(); switch(code){ case F1: cc = Color.RED; Colorname ="あか"; break; case F2: cc = Color.BLUE; Colorname ="あお"; break; case F3: cc = Color.YELLOW; Colorname ="きいろ"; break; default: break; } //Totalno(0,0); }
}
### 実現してたこと *クリックすると六角形を表示。各図形の座標は配列で管理。 *ファンクションキーのF1-F3で色分け。 *配列をForで参照、同じ位置に図形が配置されないようにする。 (既に置かれてる場合Already set:図形番号 が表示) ### わからないこと transformを使う前提でpathの配列化?をしてみたのですが、エラー多発・。 ### 補足情報(FW/ツールのバージョンなど) Java10.0.2 Eclipse4.7.3a(JavaFXプラグイン導入済)で作成しています。
あなたの回答
tips
プレビュー