2017-05-26 85 views
1

我很難在我的JavaFX場景中對齊項目。我的JavaFX場景很混亂

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.ScrollPane?> 
<?import javafx.scene.control.TableView?> 
<?import javafx.scene.control.TextArea?> 
<?import javafx.scene.control.ToolBar?> 
<?import javafx.scene.image.Image?> 
<?import javafx.scene.image.ImageView?> 
<?import javafx.scene.layout.Pane?> 

<Pane minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="1200.0" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1" fx:controller="app.controller.TableViewController"> 
    <ScrollPane> 
     <TableView fx:id="tableView" prefHeight="500.0" prefWidth="1100.0" snapToPixel="false" styleClass="100"> 
     </TableView> 
    </ScrollPane> 
    <ToolBar maxHeight="35.0" prefHeight="35.0" prefWidth="1200" style="-fx-background-color: #8C0000;"> 
     <ImageView fitHeight="35.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true"> 
      <Image url="@../images/qmit-search-toolbar-logo.png" /> 
     </ImageView> 
     <TextArea fx:id="linkInput" maxHeight="30.0" maxWidth="250.0" /> 
     <TextArea fx:id="keywordInput" maxHeight="30.0" maxWidth="100.0" /> 
     <Button fx:id="buttonSearch" maxHeight="30.0" maxWidth="100.0" text="Search QMIT" /> 
    </ToolBar> 
</Pane> 

我的目標是有一個帶有標誌的工具欄,兩個輸入文本字段和一個按鈕。在下面,一個以屏幕爲中心的桌子。我在這裏做錯了什麼,最終導致了這樣一團亂七八糟的混亂?

回答

2

A Pane本身沒有佈局。

(順便說一句,注意,TableView提供了自己的滾動功能:不滾動窗格包裹。)

使用,例如,BorderPane

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.ScrollPane?> 
<?import javafx.scene.control.TableView?> 
<?import javafx.scene.control.TextArea?> 
<?import javafx.scene.control.ToolBar?> 
<?import javafx.scene.image.Image?> 
<?import javafx.scene.image.ImageView?> 
<?import javafx.scene.layout.BorderPane?> 

<BorderPane minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="1200.0" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1" fx:controller="app.controller.TableViewController"> 
    <center> 
     <TableView fx:id="tableView" prefHeight="500.0" prefWidth="1100.0" snapToPixel="false" styleClass="100"> 
     </TableView> 
    </center> 
    <top> 
     <ToolBar maxHeight="35.0" prefHeight="35.0" prefWidth="1200" style="-fx-background-color: #8C0000;"> 
      <ImageView fitHeight="35.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true"> 
       <Image url="@../images/qmit-search-toolbar-logo.png" /> 
      </ImageView> 
      <TextArea fx:id="linkInput" maxHeight="30.0" maxWidth="250.0" /> 
      <TextArea fx:id="keywordInput" maxHeight="30.0" maxWidth="100.0" /> 
      <Button fx:id="buttonSearch" maxHeight="30.0" maxWidth="100.0" text="Search QMIT" /> 
     </ToolBar> 
    </top> 
</BorderPane> 

的Oracle JavaFX教程有一個section on layout panes

+0

謝謝。並感謝您的建議。我還注意到,添加prefWidth和prefHeight簡化了一下。例如,如果沒有這些值,工具欄不必要的高。 – santafebound

2

嘗試使用垂直框,而不是一個窗格爲基礎的,並與TextField的替代文本域添加到該第一工具欄,然後與你的TableView

-1

使用JavaFX的場景生成器添加滾動窗格比寫的簡單得多FXML手動。

它可以從Oracle網站下載。 http://www.oracle.com/technetwork/java/javase/downloads/sb2download-2177776.html

+2

請勿從Oracle下載完全過時的SceneBuilder。 SceneBuilder不是由Gluon維護的,你可以在這裏下載它:http://gluonhq.com/products/scene-builder/ – mipa

+1

這並沒有真正回答這個問題。即使使用SceneBuilder的(最新版本),您仍然需要選擇使用哪個佈局窗格。 SceneBuilder不會以任何方式幫助選擇在這裏使用一些合理的東西('BorderPane'或'VBox') - 事實上,它甚至可能導致您相信將一個東西放置在一個「窗格」中會起作用,而那會如果用戶調整了窗口的大小,那麼課程可能會非常糟糕。 –