忍者ブログ

からすまる日誌 java

応用2(12) プリント課題

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

応用2(12) プリント課題

サンプルExe38a.java
 
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
public class Exe28a extends Application {
 public static void main(String[] args) {
  launch(args);
 }
 @Override
 public void start(Stage myStage) {
  Button[] kobitoB = new Button[3];
  kobitoB[0] = new Button("緑色の小人");
  kobitoB[1] = new Button("赤色の小人");
  kobitoB[2] = new Button("黄色の小人");
  Button clearB = new Button("画像を消す");
  Canvas canvas = new Canvas(300, 240);
  GraphicsContext gc = canvas.getGraphicsContext2D();
  Image[] myImage = new Image[3];
  myImage[0] = new Image("kobito1.gif");
  myImage[1] = new Image("kobito2.gif");
  myImage[2] = new Image("kobito3.gif");
//  setOnActionメソッド内で変数「i」は参照できない
  for (int i = 0; i < kobitoB.length; i++) {
   final int NO = i;  //int no = i;でも実質finalと同じ
   kobitoB[i].setOnAction((ActionEvent event) -> {
    gc.clearRect(135, 100, 30, 32);
    gc.drawImage(myImage[NO], 135, 100); //23×32
   });
  }
//  kobitoB[0].setOnAction((ActionEvent event) -> {
//   gc.clearRect(135, 100, 30, 32);
//   gc.drawImage(myImage[0], 135, 100); //23×32
//  });
//  kobitoB[1].setOnAction((ActionEvent event) -> {
//   gc.clearRect(135, 100, 30, 32);
//   gc.drawImage(myImage[1], 135, 100); //25×32
//  });
//  kobitoB[2].setOnAction((ActionEvent event) -> {
//   gc.clearRect(135, 100, 30, 32);
//   gc.drawImage(myImage[2], 135, 100); //30×32
//  });
  clearB.setOnAction((ActionEvent event) -> {
   gc.clearRect(135, 100, 30, 32);
  });
  HBox hBox = new HBox();
//  hBox.getChildren().add(kobitoB[0]);
//  hBox.getChildren().add(kobitoB[1]);
//  hBox.getChildren().add(kobitoB[2]);
  for (int i = 0; i < kobitoB.length; i++) {
   hBox.getChildren().add(kobitoB[i]);
  }
  hBox.setAlignment(Pos.CENTER);
  BorderPane.setAlignment(clearB, Pos.CENTER);
  BorderPane pane = new BorderPane();
  pane.setStyle("-fx-background-color: lightgray;");
  pane.setTop(hBox);
  pane.setBottom(clearB);
  pane.setCenter(canvas);
  Scene scene = new Scene(pane, 300, 300);
  myStage.setTitle("Exe28");
  myStage.setScene(scene);
  myStage.show();
 }
}
 
↑これ。別の人の質問に先生が答えたバージョン。

 
 
難しい点がいくつもある
①いつアクションが来るかわからないのでfor文の中で変数iが参照できないらしい
②final int NOというところにiを格納すると、「定数」となって大丈夫らしい
③ただしfor文の中で宣言された変数は、for文の中でしか生きないよな??
④現にfor文の外でNOを代入しようとするとエクリプスさんはおこらはる
⑤しかしコンピューターのメモリにはこの定数NOは格納されているらしい
 
ともかくこういうやりかたがあるらしい。
 
もうひとつ肝心なところがある
「->」
これね。
ラムダ式というやつの記号らしい。
またこれがからんでいると挙動が違うらしい??
 
とにかくもっと賢くなってからでないと到底理解できない。
 


プリントに戻る
 
--->Exe34.java
 
package application;
import javafx. application.Application;
import javafx.event.ActionEvent;
import javafx. scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.paint.Color;
import javafx. stage.Stage;
public class EXE34 extends Application {
 double posX,posY;
 public static void main(String[] args) {
   launch(args);
 }
 @Override
 public void start(Stage myStage) {
  Canvas canvas = new Canvas(300,300);
  GraphicsContext gc = canvas.getGraphicsContext2D();
  canvas.setOnMousePressed(e -> {
   posX = e.getX();
   posY = e.getY();
  });
  canvas.setOnMouseDragged(e -> {
   gc.strokeLine(posX,posY,e.getX(),e.getY());
   posX = e.getX();
   posY = e.getY();
  });
  Button clearB = new Button("クリア");//clearBという変数にボタン
  clearB.setOnAction((ActionEvent event)->{
   gc.clearRect(0,0,canvas.getWidth(),canvas.getHeight());
  });
  BorderPane pane = new BorderPane();
  pane.setStyle("-fx-background-color:lightgray;");
  pane.setBottom(clearB);
  pane.setCenter(canvas);
  Scene scene = new Scene(pane,300,350,Color.LIGHTGRAY);
  myStage.setTitle("Exe34");
  myStage.setScene(scene);
  myStage.show();
 }
}
 
 

EXE35
 
ええとヒントの部分で赤ボタンはできるとして、
その配置はhboxになるのかな?
 

 
ここまではできたがボタンに色を付けるのはどうやるのだったか 
→プリントp24をみましょう
  
drawB.setStyle("-fx-background-color:black; -fx-text-fill:white;");
 
これですよ。
cssの記述を2つつなげるときは、しれっと「;」の後にもう一度-fx-から記述する。
 

あと中央揃えにしてマージンですね。
なんかこうやったらマージンは付いた。
HBox hbox = new HBox(8);
 
centerもあった。
hbox.setAlignment(Pos.CENTER);
 
 
--->Exe35.java
 
package application;
import javafx. application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx. scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx. stage.Stage;
public class EXE35 extends Application {
 double posX,posY;
 public static void main(String[] args) {
   launch(args);
 }
 @Override
 public void start(Stage myStage) {
  Canvas canvas = new Canvas(300,300);
  GraphicsContext gc = canvas.getGraphicsContext2D();
  canvas.setOnMousePressed(e -> {
   posX = e.getX();
   posY = e.getY();
  });
  canvas.setOnMouseDragged(e -> {
   gc.strokeLine(posX,posY,e.getX(),e.getY());
   posX = e.getX();
   posY = e.getY();
  });
  //-------------------
  //ボタン群
  //-------------------
  Button clearB = new Button("クリア");//clearBという変数にボタン
  clearB.setOnAction((ActionEvent event)->{
   gc.clearRect(0,0,canvas.getWidth(),canvas.getHeight());
  });
  Button drawB = new Button("black");
  drawB.setOnAction((ActionEvent event)->{
   gc.setStroke(Color.BLACK);
   //gc.clearRect(0,0,canvas.getWidth(),canvas.getHeight());
  });
  Button drawR = new Button("red");
  drawR.setOnAction((ActionEvent event)->{
   gc.setStroke(Color.RED);
   //gc.clearRect(0,0,canvas.getWidth(),canvas.getHeight());
  });
  Button drawG = new Button("green");
  drawG.setOnAction((ActionEvent event)->{
   gc.setStroke(Color.GREEN);
  });
  Button drawBlue = new Button("blue");
  drawBlue.setOnAction((ActionEvent event)->{
   gc.setStroke(Color.BLUE);
  });
  //-------------------
  //ボタンに色を付ける
  //-------------------
  drawB.setStyle("-fx-background-color:black; -fx-text-fill:white;");
  drawR.setStyle("-fx-background-color:red; -fx-text-fill:white;");
  drawG.setStyle("-fx-background-color:green; -fx-text-fill:white;");
  drawBlue.setStyle("-fx-background-color:blue; -fx-text-fill:white;");
  //-------------------
  //pane
  //-------------------
  BorderPane pane = new BorderPane();
  HBox hbox = new HBox(8);
  hbox.getChildren().addAll(clearB,drawB,drawR, drawG,drawBlue);
  hbox.setAlignment(Pos.CENTER);
  pane.setStyle("-fx-background-color:lightgray;");
  pane.setBottom(hbox);
  pane.setCenter(canvas);
  Scene scene = new Scene(pane,300,350,Color.LIGHTGRAY);
  myStage.setTitle("Exe35");
  myStage.setScene(scene);
  myStage.show();
 }
}
 
PR

コメント

ブログ内検索

P R