2013-07-13 4 views
0

Je veux mettre en œuvre cet exemple: http://docs.oracle.com/javafx/2/ui_controls/toggle-button.htm#Contexte ne change pas lorsque je passe des boutons

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

}

Mais pour une raison quelconque, je peux voir les boutons, mais le rectangle n'apparaît pas lorsque je tente de change les boutons. Pouvez-vous m'aider à trouver où est mon erreur? Et aussi comment je peux implémenter cet exemple avec plusieurs rectangles contenant un contenu différent?

+0

J'ai ajouté une réponse à: http://stackoverflow.com/a/17647629/2549748 (que le code est presque le même) –

Répondre

1

Vous devez ajouter à votre rect graphique de la scène:

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

Aussi, pensez à utiliser une disposition appropriée pour votre root, BorderPane au lieu de Group par exemple.

+0

J'ai mis à jour le poste avec la solution de travail. La deuxième question est comment je peux changer plusieurs 'Rectangle' avec un contenu différent en utilisant les boutons? –

Questions connexes