前提・実現したいこと
javafxにてCanvasを使った絵を書くプログラムを作っています。
位置の指定はしているのですが、指定なりなんなりしても重なってしまいます。
2つの中身の要素をまとめて1つのHBoxに入れたりもしたのですが改善しませんでした。
載せているプログラムは上記の操作をする前のものです。
色を変えるボタンのHBoxをCanvasの左上に、線の太さを変えるHBoxをCanvasの右上に配置したいです。
■■な機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
2つのHBoxが重なってしまう
該当のソースコード
javafx
1import javafx.application.Application; 2import javafx.event.ActionEvent; 3import javafx.event.EventHandler; 4import javafx.geometry.Pos; 5import javafx.scene.Group; 6import javafx.scene.Scene; 7import javafx.scene.canvas.Canvas; 8import javafx.scene.canvas.GraphicsContext; 9import javafx.scene.control.Button; 10import javafx.scene.control.TextField; 11import javafx.scene.input.MouseEvent; 12import javafx.scene.layout.FlowPane; 13import javafx.scene.layout.HBox; 14import javafx.scene.paint.Color; 15import javafx.stage.Stage; 16public class Draw extends Application { 17 public static void main(String[] args) { 18 launch(); 19 } 20GraphicsContext Graphic; 21 public void start(Stage myStage) { 22 myStage.setTitle("お絵かきアプリ"); 23 myStage.setWidth(500); 24 myStage.setHeight(500); 25 Canvas cn = new Canvas(1500, 1200); 26 cn.setOnMousePressed(event -> mousePressed(event)); 27 cn.setOnMouseDragged(event -> mouseDragged(event)); 28 29 Graphic = cn.getGraphicsContext2D(); 30 Button Black = new Button("黒"); //色を変えるボタンを設置 31 Button Brown = new Button("茶"); 32 Button Red = new Button("赤"); 33 Button Blue = new Button("青"); 34 Button Sky = new Button("水色"); 35 Button Yellow = new Button("黄"); 36 Button Green = new Button("緑"); 37 Button Pink = new Button("ピンク"); 38 Button Orange = new Button("オレンジ"); 39 Button clear = new Button("キャンバスをリセット"); 40 //線の太さを変えるテキストフィールドとボタン 41 TextField num = new TextField(); 42 num.setPrefWidth(100); 43 num.setText("変更したい太さ"); 44 Button cha = new Button("変更"); 45 cha.setOnAction(new EventHandler<ActionEvent>() { 46 public void handle(ActionEvent Event) { 47 if(num != null) { 48 int n = Integer.parseInt(num.getText()); 49 Graphic.setLineWidth(n); 50 Graphic.beginPath(); 51 } 52 } 53 }); 54 Black.setOnAction(new EventHandler<ActionEvent>() { 55 public void handle(ActionEvent Event) { 56 Graphic.setStroke(Color . BLACK ); 57 Graphic.beginPath(); 58 } 59 }); 60 Brown.setOnAction(new EventHandler<ActionEvent>() { 61 public void handle(ActionEvent Event) { 62 Graphic.setStroke(Color . BROWN ); 63 Graphic.beginPath(); 64 } 65 }); 66 Red.setOnAction(new EventHandler<ActionEvent>() { 67 public void handle(ActionEvent Event1) { 68 Graphic.setStroke(Color . RED ); 69 Graphic.beginPath(); 70 } 71 }); 72 Blue.setOnAction(new EventHandler<ActionEvent>() { 73 public void handle(ActionEvent Event2) { 74 Graphic.setStroke(Color . BLUE ); 75 Graphic.beginPath(); 76 } 77 }); 78 Sky.setOnAction(new EventHandler<ActionEvent>() { 79 public void handle(ActionEvent Event2) { 80 Graphic.setStroke(Color . SKYBLUE ); 81 Graphic.beginPath(); 82 } 83 }); 84 Yellow.setOnAction(new EventHandler<ActionEvent>() { 85 public void handle(ActionEvent Event3) { 86 Graphic.setStroke(Color . YELLOW ); 87 Graphic.beginPath(); 88 } 89 }); 90 Green.setOnAction(new EventHandler<ActionEvent>() { 91 public void handle(ActionEvent Event4) { 92 Graphic.setStroke(Color . GREEN ); 93 Graphic.beginPath(); 94 } 95 }); 96 Pink.setOnAction(new EventHandler<ActionEvent>() { 97 public void handle(ActionEvent Event5) { 98 Graphic.setStroke(Color . PINK ); 99 Graphic.beginPath(); 100 } 101 }); 102 Orange.setOnAction(new EventHandler<ActionEvent>() { 103 public void handle(ActionEvent Event6) { 104 Graphic.setStroke(Color . ORANGE ); 105 Graphic.beginPath(); 106 } 107 }); 108 clear.setOnAction(new EventHandler<ActionEvent>() { 109 public void handle(ActionEvent Event7) { 110 Graphic.clearRect(0 , 0 , cn.getWidth(), cn.getHeight()); 111 Graphic.beginPath(); 112 } 113 }); 114 HBox hb = new HBox(cn , Black , Brown ,Red , Blue , Sky , Yellow , Green , Pink , Orange , clear ); 115 HBox hb2 = new HBox(num , cha); 116 hb.setAlignment(Pos.TOP_LEFT); 117 hb2.setAlignment(Pos.TOP_RIGHT); 118 myStage.setScene(new Scene(new Group(cn , hb , hb2))); 119 myStage.show(); 120} 121 void mousePressed(MouseEvent Event2) { 122 Graphic.moveTo(Event2.getX(), Event2.getY()); 123} 124 void mouseDragged(MouseEvent Event3) { 125 Graphic.lineTo(Event3.getX(), Event3.getY()); 126 Graphic.stroke(); 127} 128}
試したこと
2つのHBoxの中身を1つのHBoxにまとめた
補足情報(FW/ツールのバージョンなど)
実行環境はjava8です
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/12/16 11:10