Фон не меняется при переключении кнопок

Я хочу реализовать этот пример: http://docs.oracle.com/javafx/2/ui_controls/toggle-button.htm#

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Toggle;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.HBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

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);

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

    tb1.setUserData(Color.LIGHTGREEN);
    tb2.setUserData(Color.LIGHTBLUE);
    tb3.setUserData(Color.SALMON);

    final Rectangle rect = new Rectangle(300, 300);

    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
            {
                rect.setFill(
                        (Color) group.getSelectedToggle().getUserData());
            }
        }
    });


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

    rect.setArcHeight(10);
    rect.setArcWidth(10);

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

    VBox vbox = new VBox();

    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);
}

}

Но почему-то я вижу кнопки, но прямоугольник не отображается, когда я пытаюсь переключить кнопки. Можете ли вы помочь мне найти, где моя ошибка? А также как я могу реализовать этот пример с несколькими прямоугольниками, содержащими разное содержимое?


person Peter Penzov    schedule 13.07.2013    source источник
comment
Я добавил ответ по адресу: stackoverflow.com/a/17647629/2549748 (поскольку код почти такой же)   -  person Klaus Eckelt    schedule 15.07.2013


Ответы (1)


Вы должны добавить rect к графу сцены:

root.getChildren().addAll(hBox, rect);

Кроме того, подумайте об использовании подходящего макета для ваших root, BorderPane вместо, например, Group.

person Salah Eddine Taouririt    schedule 13.07.2013
comment
Я обновил пост с рабочим решением. Второй вопрос, как с помощью кнопок переключать несколько Rectangle с разным содержимым? - person Peter Penzov; 13.07.2013