0

私は正しく動作していないこの例に取り組んでいます:

public class test extends Application
{

    private void init(Stage primaryStage)
    {

        Group root = new Group();
        primaryStage.setScene(new Scene(root));

        String pillButtonCss = DX57DC.class.getResource("PillButton.css").toExternalForm();

        // create 3 toggle buttons and a toogle group for them
        ToggleButton tb1 = new ToggleButton("Left Button");
        tb1.setId("pill-left");
        ToggleButton tb2 = new ToggleButton("Center Button");
        tb2.setId("pill-center");
        ToggleButton tb3 = new ToggleButton("Right Button");
        tb3.setId("pill-right");

        final ToggleGroup group = new ToggleGroup();
        tb1.setToggleGroup(group);
        tb2.setToggleGroup(group);
        tb3.setToggleGroup(group);
        // select the first button to start with
        group.selectToggle(tb1);

        //////////////////////////////////////////

        final VBox vbox = new VBox();

        final Rectangle rect1 = new Rectangle(300, 300);
        rect1.setFill(Color.ALICEBLUE);
        final Rectangle rect2 = new Rectangle(300, 300);
        rect2.setFill(Color.AQUA);
        final Rectangle rect3 = new Rectangle(300, 300);
        rect3.setFill(Color.AZURE);

        tb1.setUserData(rect1);
        tb2.setUserData(rect2);
        tb3.setUserData(rect3);

        group.selectedToggleProperty().addListener(new ChangeListener<Toggle>()
        {
            @Override
            public void changed(ObservableValue<? extends Toggle> ov, Toggle toggle, Toggle new_toggle)
            {
                if (new_toggle == null)
                {
                    //rect.setFill(Color.WHITE);
                }
                else
                {
                    vbox.getChildren().addAll((Node[]) group.getSelectedToggle().getUserData());
                    //rect.setFill((Color) group.getSelectedToggle().getUserData());
                }
            }
        });


        ///////////////////////////////////////////


        HBox hBox = new HBox();
        hBox.getChildren().addAll(tb1, tb2, tb3);
        hBox.setPadding(new Insets(20, 20, 260, 20));
        hBox.getStylesheets().add(pillButtonCss);



        vbox.getChildren().add(hBox);
        //vbox.getChildren().add(rect);

        root.getChildren().add(vbox);
    }

    @Override
    public void start(Stage primaryStage) throws Exception
    {
        init(primaryStage);
        primaryStage.show();
    }

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

データを保存するいくつかの Rectangles (またはオブジェクトまたはオブジェクト) を作成したいと考えています。ボタンを使用してユーザーの前に表示される長方形(オブジェクト)を切り替えたい。私が実装した例は正しく動作していません。これを実装する適切な方法を教えてください。

4

1 に答える 1

1

Rectangle を使用して Stackpane を作成し、その上に Text を使用して Label を作成できます (それが保存するデータである場合)。または、任意のペインの背景に色付きの長方形を設定することもできます。

このペインをユーザーデータとして対応するボタンに追加し、ボタンのユーザーデータをトグルの VBox に追加します。

final StackPane rect1pane = new StackPane();
final Rectangle rect1 = new Rectangle(300, 300);
rect1pane.getChildren().add(rect1);
rect1pane.getChildren().add(new Label("Some text"));
tb1.setUserData(rect1pane);

トグルプロパティリスナー:

...
else{
//Delete rectangles added before ( or check if this one isnt already dispayed)
if(group.getSelectedToggle().getUserData() instanceof Node)
     vbox.getChildren().add((Node)group.getSelectedToggle().getUserData());
}

サンプル コードを変更するだけの場合は、次のように変更します。

vbox.getChildren().addAll((Node[]) group.getSelectedToggle().getUserData());

vbox.getChildren().addAll((Node) group.getSelectedToggle().getUserData());

Selected ToggleButton の Rectangle を追加しただけなので、配列ではなく 1 つだけです。

クリックして四角形を表示した後、ウィンドウを大きくします (hbox の下のスペースが空であっても、hbox の一部であり、追加した四角形で使用できないため、260 ピクセルの下部パディングは役に立ちません)。

 group.selectToggle(tb1);

init メソッドの最後の行まで ;)

于 2013-07-15T05:57:11.583 に答える