2016-01-14 31 views
0

我只是在一個小項目上工作,並開始使用JavaFX。 我有一個問題,我不知道任何解決方案..把一個滾動條放到窗格中JavaFX

所以我管理它帶一個滾動條(包括聽衆)到根。 但聽衆不起作用。

我想添加一個在另一個之下的許多組合框,當我到達場景(LayoutX)時,它應該可以滾動。

我該如何解決我的問題?

package application; 

import javafx.application.Application; 
import javafx.beans.value.ObservableValue; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Orientation; 
import javafx.scene.Scene; 
import javafx.scene.control.*; 
import javafx.scene.input.ScrollEvent; 
import javafx.scene.layout.Pane; 
import javafx.scene.text.*; 
import javafx.stage.Stage; 
import application.XMLActions;; 

public class Main extends Application { 

    /** 
    * Globale Variablen 
    */ 
    int abstandszaehler = 0; 
    private Pane root = new Pane();   
    private ScrollBar sB = new ScrollBar(); 
    private XMLActions xA = new XMLActions(); 




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

    @Override 
    public void start(Stage primaryStage) { 

     primaryStage.setTitle("XML-Zeilenersteller"); 
     primaryStage.setResizable(false); 


     /** 
     * Elemente für die Root 
     */ 
     //Buttons 
     Button newXMLLine = new Button(); 
     newXMLLine.setText("Einfügen neuer XML-Zeile"); 
     newXMLLine.setLayoutX(735); 
     newXMLLine.setLayoutY(80); 
     newXMLLine.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 

       setComboBox(); 
      } 
     }); 

     Button newXMLDocument = new Button(); 
     newXMLDocument.setText("Erstelle XML-Dokument"); 
     newXMLDocument.setLayoutX(735); 
     newXMLDocument.setLayoutY(550); 
     newXMLDocument.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       System.out.println("Test2"); 
      } 
     }); 

     //Überschrift 
     Text header = new Text(105, 50, "XML Lines Creator"); 
     header.setFont(new Font(30)); header.setStyle("-fx-underline: true;"); 

     //Scrollbar 
     sB.setLayoutX(715); 
     sB.setLayoutY(80); 
     sB.setMin(0); 
     sB.setOrientation(Orientation.VERTICAL); 
     sB.setPrefHeight(500); 
     sB.setMax(360); 
     sB.setUnitIncrement(30); 
     sB.setBlockIncrement(35); 
     sB.valueProperty().addListener((ObservableValue<? extends Number> ov, 
       Number old_val, Number new_val) -> { 
        System.out.println(-new_val.doubleValue()); 
      });   

     /** 
     * Hauptseite als Root 
     * Rootbearbeitungen 
     */ 
     root.setStyle("-fx-background-color: lightsteelblue");              
     root.getChildren().addAll(sB,newXMLDocument,header,newXMLLine); 


     //Scene setzen 
     Scene mainScene = new Scene(root, 900, 600); 
     primaryStage.setScene(mainScene); 
     primaryStage.show(); 


    } 


    public void setComboBox(){ 
     ComboBox cB = new ComboBox(xA.getList()); 
     root.getChildren().add(cB); 
     cB.setLayoutX(80); 
     cB.setLayoutY(80 + abstandszaehler); 
     abstandszaehler = abstandszaehler + 30; 

    }   
} 

編輯1: 我與聽衆的代碼有一點進步:

回答

1

ScrollPane更換Pane。在ScrollPane上,您可以定義滾動條的策略。

如果你定義它是這樣,它會像一個Pane

ScrollPane sp = new ScrollPane(); 
sp.setHbarPolicy(ScrollBarPolicy.NEVER); 
sp.setVbarPolicy(ScrollBarPolicy.NEVER); 

甲骨文在this article看看。

+0

謝謝,它在將我的窗格更改爲ScrollPane後有效。 – Ceeya

+0

我看到..我也可以在Scrollpane中使用一個窗格.. – Ceeya

1

首先,如果您希望垂直佈置控件,請考慮使用VBox。這個VBox應該被一個ScrollPane包圍。

如果再設置VBoxprefHeightControl.USE_COMPUTED_SIZEmaxHeightDouble.POSITIVE_INFINITYVBox應該調整,以適應它的無限制的內容,並封閉ScrollPane應該顯示和隱藏在必要時滾動條。

+0

謝謝,我使用Scrollpanel。但我想要更多的項目(按鈕等)的獨立位置。所以我正在使用一個組。 – Ceeya