このanswerではローダークラスを使用して、後処理なしでComboBox
を動的にロードします。
前処理に同様のテクニックを使用して、Polygonを再利用しましたが、ポリゴンはitems
のプロパティ、または同様のものを公開しません。 私のソリューションは、ポリゴンを拡張して、そのようなプロパティを追加しました:FXML
ファイルの両方にFXMLで構築されたポリゴンにポイントを動的にロードします
public class PointsLoader5 {
private ObservableList<Double> items;
public ObservableList<Double> getItems() {
items = FXCollections.observableArrayList(
new Double[] {100.,0.,100., 100., 0., 0.});
return items;
}
}
用途:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.Double?>
<?import javafx.xml_polygon.DPolygon?>
<DPolygon fx:id="triangle" fill="GREEN" stroke="RED" strokeType="INSIDE"
items="${pointsLoader.items}" xmlns:fx="http://javafx.com/fxml/1" >
</DPolygon>
そして
public class DPolygon extends javafx.scene.shape.Polygon{
public ObjectProperty<ObservableList<Double>> items =
new SimpleObjectProperty<>(this, "items");
public DPolygon() {
items.addListener(new ChangeListener<ObservableList<Double>>() {
@Override
public void changed(ObservableValue<? extends ObservableList<Double>>
observable, ObservableList<Double> oldValue,
ObservableList<Double> newValue) {
addPolyPoints();
}
});
}
private void addPolyPoints() { super.getPoints().setAll(items.get());}
public ObjectProperty<ObservableList<Double>>itemsProperty() { return items; }
public final ObservableList<Double> getItems() {return items.get(); }
public final void setItems(ObservableList<Double> value) {items.set(value); }
}
ポイントを供給するために、Loaderクラスを持っていますすべて一緒にテストしてください:
public class DrawTrianle5 extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
primaryStage.setTitle("Set points using loader");
Group group = new Group();
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25, 25, 25, 25));
group.getChildren().add(grid);
FXMLLoader loader = new FXMLLoader(getClass().getResource("triangle/Triangle5.fxml"));
loader.getNamespace().put("pointsLoader", new PointsLoader5());
DPolygon triangle = loader.load();
grid.add(triangle, 0, 0);
Scene scene = new Scene(group, 450, 175);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
問題なく動作します。
質問:正しいアプローチですか、FXML
で構築されたPolygon
にポイントを動的にロードする方がいいですか?後処理は避けてください。
あなたが求めていることは本当に明確ではありません。 "Polygonは' items'プロパティやそれに類するものを公開しません。 " ObservableList getPoints()を公開します。なぜそれを使用しないのですか? –
'Polygon'を後処理せずに使う方法を知りません。あなたは例を投稿できますか? – c0der
おそらく問題を明確にする必要があります。 「ポリゴンの後処理」とはどういう意味ですか? (Post = after:* *?)あなたが解決しようとしている実際の問題は何ですか? –