2013-07-21 3 views
0

토글 버튼으로 전환 할 수있는 여러 작업 공간을 생성하려고합니다. 내가 두 번째 버튼을 누르면JavaFX에서 작업 공간을 전환하는 방법

enter image description here

내가이 얻을 :

enter image description here

내가 사용하려는 나는이 예

package menunavigation; 

import javafx.application.Application; 
import javafx.beans.value.ChangeListener; 
import javafx.beans.value.ObservableValue; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Insets; 
import javafx.scene.Node; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Menu; 
import javafx.scene.control.MenuBar; 
import javafx.scene.control.Toggle; 
import javafx.scene.control.ToggleButton; 
import javafx.scene.control.ToggleGroup; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.scene.text.Text; 
import javafx.stage.Stage; 

public class MenuNavigation extends Application 
{ 

    @Override 
    public void start(Stage primaryStage) 
    { 

     final VBox vbox = new VBox(); 

     MenuBar menuBar = new MenuBar(); 

     // --- Menu File 
     Menu menuFile = new Menu("File"); 

     // --- Menu Edit 
     Menu menuEdit = new Menu("Edit"); 

     // --- Menu View 
     Menu menuView = new Menu("View"); 

     menuBar.getMenus().addAll(menuFile, menuEdit, menuView); 

     // buttons 

     String pillButtonCss = MenuNavigation.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 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 
       { 
        //rect.setFill((Color) group.getSelectedToggle().getUserData()); 
        vbox.getChildren().setAll((Node) group.getSelectedToggle().getUserData()); 
       } 
      } 
     }); 

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

     // end buttons 

     vbox.getChildren().addAll(menuBar, hBox, new Text("Test Space")); 

     StackPane root = new StackPane(); 
     root.getChildren().add(vbox); 

     Scene scene = new Scene(root, 800, 850); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

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

이 시각적 인 결과를 만들어 단추를 토글하여 다른 작업 공간을 하나 만들려면 BorderPane 또는 GridPane에서 많은 다른 구성 요소를 삽입하고 싶습니다. 이 결과를 얻을 수 있도록 도와 주시겠습니까?

답변

1

TabPane을 사용하지 않는 이유가 있습니까?

편집 :

바꾸기 :

vbox.getChildren().set(2,(Node) group.getSelectedToggle().getUserData()); 

대신 텍스트의 사각형을 표시하려면와

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

.

이것은 vbox의 색인 2 (텍스트)를 가진 노드를 (현재 코드의 모든 요소를 ​​바꾸는 대신) ToggleButtons UserData의 노드로 바꿉니다.

+0

질문이 하나 더 있습니다. 나는 직장을 전환 할 때의 성과가 그리 좋지 않다는 것을 알았다. 더 이상 최적화 된 솔루션이 있습니까? –

+1

더 효율적인지는 모르겠지만 작업 영역 (예 : borderpane)에 대한 컨테이너를 정의하고 클릭시 내용을 변경하는 것이 분명합니다. 그러면 vbox의 자식 목록에 변경 사항을 적용하는 것이 어려워집니다. –

관련 문제