JavaFXで2Dオブジェクトに行えるさまざまな操作とは?和・差・積の基本を解説
JavaFXでは、2Dオブジェクト(図形)に対して和(Union)、差(Subtraction)、積(Intersection)という3つの基本的な操作をサポートしています。これらの操作は、javafx.scene.shape.Shapeクラスに用意された静的メソッド(Shape.union()、Shape.subtract()、Shape.intersect())を利用することで簡単に実行でき、複数の図形を組み合わせた新しい形状を作成できます。
JavaFXの2Dオブジェクトに対する3つの操作
和(Union)操作 − 2つ以上の図形を入力として受け取り、それらの図形全体が占める領域を1つの形状として返します。
積(Intersection)操作 − 2つ以上の図形を入力として受け取り、それらが重なり合う共通部分の領域のみを返します。
差(Subtraction)操作 − 2つ以上の図形を入力として受け取り、最初の図形から2番目の図形と重なる領域を除外した残りの部分を返します。
サンプルコード
以下は、2つの円を重ねて描画し、それぞれの操作(和・積・差)を適用した結果を表示するJavaFXアプリケーションの例です。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Shape;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
public class JavaFXOperations extends Application {
public void start(Stage stage) {
Font font = Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 12);
// 和(Union)演算用の円を描画
Circle shape1 = new Circle(65.0f, 135.0f, 50.0f);
Circle shape2 = new Circle(130.0f, 135.0f, 50.0f);
// 和(Union)演算を実行
Shape union = Shape.union(shape1, shape2);
union.setFill(Color.RED);
Text label1 = new Text("Union Operation");
label1.setFont(font);
label1.setX(40);
label1.setY(230);
// 積(Intersection)演算用の円を描画
Circle shape3 = new Circle(250.0f, 135.0f, 50.0f);
Circle shape4 = new Circle(325.0f, 135.0f, 50.0f);
// 積(Intersection)演算を実行
Shape intersect = Shape.intersect(shape3, shape4);
intersect.setFill(Color.RED);
Text label2 = new Text("Intersect Operation");
label2.setFont(font);
label2.setX(225);
label2.setY(230);
// 差(Subtraction)演算用の円を描画
Circle shape5 = new Circle(445.0f, 135.0f, 50.0f);
Circle shape6 = new Circle(510.0f, 135.0f, 50.0f);
// 差(Subtraction)演算を実行
Shape subtract = Shape.subtract(shape5, shape6);
subtract.setFill(Color.RED);
Text label3 = new Text("Subtract Operation");
label3.setFont(font);
label3.setX(420);
label3.setY(230);
// ステージの設定
Group root = new Group(
shape1, shape2, shape3, shape4, shape5, shape6,
union, intersect, subtract, label1, label2, label3
);
Scene scene = new Scene(root, 600, 300);
stage.setTitle("2D Operations Example");
stage.setScene(scene);
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
コードのポイント
Shape.union(shape1, shape2):2つの円を結合し、両方を合わせた領域を持つ新しい形状を生成します。Shape.intersect(shape3, shape4):2つの円の重なり部分だけを抽出した形状を生成します。Shape.subtract(shape5, shape6):左側の円から右側の円と重なる部分を取り除いた形状を生成します。元となる図形もグループに含めているため、操作前の円と演算後の形状を同時に比較しながら確認できます。
実行結果

このように、JavaFXのShapeクラスを活用すれば、図形の合成や切り抜きといったブーリアン演算を直感的なコードで実現できます。アイコン作成やカスタム図形の描画など、さまざまな場面で応用できる便利な機能なので、ぜひ活用してみてください。
-
JavaFXで描画できる2D形状の種類と作成方法を徹底解説
JavaFXで利用できる主な2D形状JavaFXでは、javafx.scene.shapeパッケージに含まれるクラスを使うことで、さまざまな2D形状(ジオメトリックシェイプ)を簡単に描画できます。ここでは、代表的な形状とそれぞれの特徴を詳しく紹介します。Line(直線) − 2点を結ぶ幾何学的構造です。javafx.scene.shape.LineクラスがXY平面上の直線を表します。Rectangle(長方形) − 4辺からなる多角形で、2組の平行で等しい辺を持ち、すべての内角が直角である図形です。javafx.scene.shape.RectangleクラスがXY平面上の長方形を表します。C
-
JavaFXのパス要素とは?種類と使い方をわかりやすく解説
javafx.scene.shape パッケージには、2D図形を描画するためのさまざまなクラスが用意されています。しかし、これらは直線、円、多角形、楕円といった基本的な(プリミティブな)図形に限られます。より複雑なカスタム図形を描きたい場合は、Pathクラスを使用する必要があります。 Pathクラスとは Pathクラスは、図形の幾何学的な輪郭を表すクラスです。このクラスを使うことで、独自のカスタムパスを自由に描画できます。 カスタムパスを描くために、JavaFXでは複数の「パス要素」が提供されており、これらはすべて javafx.scene.shape パッケージ内のクラスとして利用可能です。