2017-08-31 8 views
0

は私の次のコードです:ラインをクリップする方法は?ここで

public void start(Stage primaryStage) throws Exception { 
    Pane pane = new Pane(); 
    Scene scene = new Scene(pane, 500, 500); 
    Line line = new Line(0, 200, 500, 200); 

    line.setStrokeWidth(2); 
    line.setStroke(Color.RED); 
    pane.getChildren().add(line); 
    primaryStage.setScene(scene); 
    primaryStage.show(); 

} 

それは行を出力しますが、私はそのラインをクリップしたいです。例:(0,200)から始まり(500,200)で終わる行がある場合、(200,200)から(400,200)にクリップしたいと思います。 行をクリップする方法はありますか?どんな助けもありがとう!ありがとうございました。

+0

通常、(200,200)〜(400,200)〜(500,200)に2行(0,200)を描画しないのはなぜですか? –

+0

[*破線または点線を描く方法は?*](https://stackoverflow.com/q/12786363/230513) – trashgod

答えて

1

クリッピングは(あなたが私達にあなたの本当のユースケースを教えてくれませんでした)あなたが何をしたいのか、本当にあるならば、私はまだSedrickはすでに彼のコードに示されているが、いくつかのためにコメントしているソリューションを使用する傾向があると思います理由。すべての図形にsetClipメソッドがあるので、なぜそれを使用しないのですか?

import javafx.application.Application; 
import javafx.geometry.Bounds; 
import javafx.scene.Scene; 
import javafx.scene.layout.Pane; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Line; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 


public class LineChartSample extends Application { 

    int clickCount = 0; 

    @Override public void start(Stage stage) { 
     Pane pane = new Pane(); 
     Scene scene = new Scene(pane, 500, 500); 
     Line line = new Line(0, 200, 500, 200); 

     line.setStrokeWidth(2); 
     line.setStroke(Color.RED); 

     Bounds b = line.getBoundsInParent(); 
     System.out.println(b); 

     pane.getChildren().add(line); 

     pane.setOnMouseClicked((event)->{ 
      ++clickCount; 
      double d = clickCount*20.0; 
      Rectangle clipRect = new Rectangle(b.getMinX() + d, b.getMinY(), b.getWidth() - 2*d, b.getHeight()); 
      line.setClip(clipRect); 
     }); 

     stage.setWidth(700); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
0

setOnMouseClickedリスナーの内側にsetEndXを使用してこれをデモしました。数学を行い、希望の結果を得るには、setEndXsetEndYの両方を使用する必要があります。

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.layout.Pane; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Line; 
import javafx.stage.Stage; 


public class LineChartSample extends Application { 

    @Override public void start(Stage stage) { 
     Pane pane = new Pane(); 
     Scene scene = new Scene(pane, 500, 500); 
     Line line = new Line(0, 200, 500, 200); 

     line.setStrokeWidth(2); 
     line.setStroke(Color.RED); 
     pane.getChildren().add(line); 

//  Rectangle clipRect = new Rectangle(line.getBoundsInParent().getWidth(), line.getBoundsInParent().getHeight()); 
//  line.setClip(clipRect); 

     line.setOnMouseClicked((event)->{ 
      line.setEndX(line.getBoundsInLocal().getWidth() - 100); 
     }); 

     stage.setWidth(700); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
関連する問題