2016-04-17 7 views
0

シェイプグラフには、四角形を作成するためのボタンとサークルを作成するボタンの2つのボタンがあります。移動するとシェイプオブジェクトの色が変わるスライダーもあります。形状もドラッグ可能です。残念ながら、カラースライダは私が望むようにはうまく動作しません。ボタンを使用して形状を作成し、その形状をマウスでクリックすると、スライダがドラッグされた場所に応じて形状の色が変わります(唯一の色は赤です)。カラーリングJavaFXシェイプ

問題は、私が望むように形を独立して色付けしたり色を再現することができないことです。長方形が最初に作成され、円が後に続く場合、円ではなく長方形に色付けできます。私は長方形に続く円の拳を作成した場合、私はサークル、その後、長方形を色付けすることができますが、再び円を選択すると、私は私が欠けているものを、非常にわからないか、それを

import javafx.application.Application; 
import javafx.beans.value.ObservableValue; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Slider; 
import javafx.stage.Stage; 
import javafx.scene.layout.Pane; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Circle; 
import javafx.scene.shape.Rectangle; 


public class SquareRectangle extends Application 
{ 
    private Rectangle selectedRectangle; 
    private Circle selectedCircle; 
    private int red = 255; 
    private int green = 0; 
    private int blue = 0; 

    public static void main(String [] args) 
    { 
     launch(args); 
    } 
    public void start(Stage primaryStage) 
    { 
     Pane root = new Pane(); 
     Scene scene = new Scene(root,800,800); 

     Button Rectangles = new Button("Rectangles"); 
     Button Circles = new Button("Circles"); 
     Slider ColorSlider = new Slider(0,255,0); 
     Circles.setLayoutX(90); 
     ColorSlider.setLayoutY(70); 

     Rectangles.setOnAction(e ->{ 
      Rectangle rect = new Rectangle(); 
      rect.setLayoutX(1080/2); 
      rect.setLayoutY(400); 
      rect.setOnMouseDragged(f ->{ 
       rect.setX(f.getX()); 
       rect.setY(f.getY()); 
      }); 
      rect.setOnMousePressed(g ->{ 
       selectedRectangle = (Rectangle) g.getTarget(); 
      }); 
      root.getChildren().add(rect); 
      rect.setHeight(100); 
      rect.setWidth(200); 
     }); 

     Circles.setOnAction(e ->{ 
      Circle circle = new Circle(300,300,100); 
      circle.setLayoutX(200); 
      circle.setLayoutY(200); 
      circle.setOnMouseDragged(f ->{ 
       circle.setCenterX(f.getX()); 
       circle.setCenterY(f.getY()); 
      }); 
      circle.setOnMousePressed(g ->{ 
       selectedCircle = (Circle) g.getTarget(); 
      }); 
      root.getChildren().add(circle); 
     }); 

     ColorSlider.valueProperty().addListener(
      (ObservableValue<? extends Number> ov,Number curVal, Number newVal)->{ 
        if(selectedRectangle != null){ 
         red = (int) ColorSlider.getValue(); 
         selectedRectangle.setFill(Color.rgb(red,green,blue)); 
       } 
        else if(selectedCircle != null && selectedRectangle == null){ 
         red = (int) ColorSlider.getValue(); 
         selectedCircle.setFill(Color.rgb(red,green,blue)); 
       } 
      }); 


     root.getChildren().addAll(Rectangles,Circles,ColorSlider); 

     primaryStage.setTitle("Shapes"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

} 

を彩色することはできません間違っている?

答えて

0

シェイプを選択すると、そのシェイプはselectedRectangle = (Rectangle) g.getTarget();またはselectedCircle = (Circle) g.getTarget();に設定されます。あなたのコードで

色を変更するための矩形がnullでない場合、それは常にチェックします:

上記のコードを使用して
if (selectedRectangle != null) { 
    red = (int) ColorSlider.getValue(); 
    selectedRectangle.setFill(Color.rgb(red, green, blue)); 
} else if (selectedCircle != null && selectedRectangle == null) { 
    red = (int) ColorSlider.getValue(); 
    selectedCircle.setFill(Color.rgb(red, green, blue)); 
} 

を、selectedCircleは、最初の文でnullであることを確認してください(if (selectedRectangle != null && selectedCircle == null) {

selectedRectangle = (Rectangle) g.getTarget(); 
selectedCircle = null; 

と副版:

はまた、新しい形状が選択されている場合、他の形状がnullに設定されていることを確認する必要がありますサークルのためのsa。

+0

ありがとうございます!私はいくつかのことを試みましたが、決してまったく打撃を受けませんでした。巨大なヘルプ – Treeno1

関連する問題