2013-07-13 40 views
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); 
    } 
} 

我想創造一些矩形(或對象中或對象)中,我想存儲數據。我想用按鈕切換顯示在用戶面前的矩形(對象)。我實施的例子工作不正常。你能告訴我什麼是實施這個的正確方法?

回答

1

你可以創建一個帶有矩形的Stackpane和一個帶有文本的標籤(如果這是你想要存儲的數據)。或者,您也可以將任何窗格的背景設置爲具有彩色的矩形。

將此窗格作爲用戶數據添加到相應的按鈕,並在切換時將按鈕userdata添加到您的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); 

togglePropertyListener:

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

因爲只是添加選定的切換按鈕的矩形,它只是一個而不是數組。

在點擊後查看rectanlge(260px底部填充沒有幫助,因爲即使該空間在hbox下方爲空,它仍然是hbox的一部分,無法被添加的矩形使用)或只是移動

group.selectToggle(tb1); 

你的init方法的最後一行;)

相關問題