2015-10-13 3 views
1

Предисловие: Новичок в Javafxml Мое приложение отлично работает. У меня только одна проблема, которую я знаю, должна иметь очень простое решение, но я не могу придумать ничего более.JavaFX: пустое окно отображается при первой попытке

Когда я запускаю свое приложение, я получаю пустое окно. Empty Window

я должен изменить размер окна, чтобы получить требуемое

Resized Window

@FXML 
void invoice(ActionEvent event) throws IOException { 
FXMLLoader loader = new FXMLLoader(); 
    loader.setLocation(getClass().getResource("/view/Invoice2.fxml")); 
    Parent planner; 
    try { 
     planner = (Parent) loader.load(); 
     stage.setTitle("Order Details"); 
     stage.getScene().setRoot(planner); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

FXML КОД:

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

<?import javafx.scene.layout.*?> 
<?import java.lang.*?> 
<?import javafx.scene.control.*?> 

<TitledPane collapsible="false" maxHeight="-Infinity" maxWidth="-Infinity"  minHeight="-Infinity" minWidth="-Infinity" prefHeight="800.0" prefWidth="1200.0" text="Invoice" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="controllers.InvoiceController"> 
    <content> 
    <AnchorPane prefHeight="200.0" prefWidth="200.0"> 
     <children> 
      <SplitPane dividerPositions="0.08355795148247978" layoutX="166.0" layoutY="108.0" orientation="VERTICAL" prefHeight="374.0" prefWidth="598.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
      <items> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0" styleClass="body-default" stylesheets="@main.css" SplitPane.resizableWithParent="false"> 
       <children> 
        <Button fx:id="back" layoutX="20.0" layoutY="14.0" mnemonicParsing="false" onAction="#BackButton" prefHeight="37.0" prefWidth="79.0" styleClass="btn-default" stylesheets="@main.css" text="Back" AnchorPane.leftAnchor="20.0" AnchorPane.topAnchor="14.0" /> 
       </children> 
       </AnchorPane> 
      <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0"> 
       <children> 
        <SplitPane dividerPositions="0.7078260869565217" layoutX="158.0" layoutY="29.0" prefHeight="283.0" prefWidth="577.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
         <items> 
         <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0"> 
          <children> 
           <TableView fx:id="invoicelisttb1" layoutX="71.0" layoutY="14.0" prefHeight="281.0" prefWidth="404.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
            <columns> 
            <TableColumn fx:id="order" prefWidth="148.0" text="Order No." /> 
            <TableColumn fx:id="name" prefWidth="167.0" text="Name" /> 
             <TableColumn fx:id="price" prefWidth="173.0" text="Price" /> 
            </columns> 
           </TableView> 
          </children> 
          </AnchorPane> 
         <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0" SplitPane.resizableWithParent="false"> 
          <children> 
           <Label layoutX="14.0" layoutY="44.0" prefHeight="31.0" prefWidth="91.0" styleClass="bold" stylesheets="@main.css" text="Order No:" AnchorPane.rightAnchor="233.0" /> 
           <TextField fx:id="txtorder" editable="false" layoutX="197.0" layoutY="44.0" prefHeight="25.0" prefWidth="83.0" AnchorPane.rightAnchor="58.0" /> 
           <Label layoutX="14.0" layoutY="91.0" prefHeight="31.0" prefWidth="77.0" styleClass="bold" stylesheets="@main.css" text="Price:" AnchorPane.rightAnchor="246.0" /> 
           <TextField fx:id="txtprice" layoutX="197.0" layoutY="91.0" prefHeight="25.0" prefWidth="83.0" AnchorPane.rightAnchor="58.0" /> 
           <Button fx:id="btnprice" layoutX="196.0" layoutY="160.0" mnemonicParsing="false" onAction="#enterPrice" prefHeight="31.0" prefWidth="113.0" styleClass="btn-default" stylesheets="@main.css" text="Enter Price" AnchorPane.rightAnchor="58.0" /> 
          </children> 
          </AnchorPane> 
         </items> 
        </SplitPane> 
       </children> 
       </AnchorPane> 
      </items> 
     </SplitPane> 
    </children> 
    </AnchorPane> 
    </content> 
    </TitledPane> 
+0

показать нам свой код –

+1

См. Мой отредактированный вопрос – user2851347

+0

Ваш основной класс также находится в папке 'view'? – Maslor

ответ

3

После работы над ним в течение нескольких дней, я, наконец, решил его, просто поместив всю структуру fxml в другую панель привязки. Я не знаю, почему это решило или как это решило, но когда я завернул весь графический интерфейс в Anchor Pane, он начал нормально работать.

+0

простую, как она звучит, у меня была та же проблема, и это решило ее для меня. дорогая. – Jonas

1

Попробуйте следующее:

try { 
    Parent planner = FXMLLoader.load(getClass().getResource("/view/Invoice2.fxml")); 

    stage.setTitle("Order Details"); 
    stage.setScene(new Scene(planner)); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 

Вместо stage.getScene().setRoot(planner) Я использовал stage.setScene(new Scene(planner));.

+0

Спасибо за такой быстрый ответ. Я уже пробовал это. Этот код отлично подходит для всех остальных окон, это именно это окно, где есть проблема – user2851347

+0

Каков ваш первоначальный размер вашего окна? У вас есть «Pref Width» и «Pref Height»? Проверьте также свой файл fxml в своей среде IDE (не внутри построителя сцен). Иногда могут быть ошибки. – pzaenger

+0

Да, я установил эти два атрибута. Когда я открываю его с помощью IDE, он отлично работает. Это просто, когда я запускаю приложение, это окно выглядит совершенно пустым, когда я изменяю его размер, он отлично работает. – user2851347

0

Вместо loader.setLocation(getClass().getResource("/view/Invoice2.fxml")); изменить ресурс до "../view/Invoice2.fxml". Это будет работать, если структура проекта является чем-то вроде этого:

project 
| 
\_ view 
| | 
| \_ Invoice2.fxml 
\_ main 
    \_ Main.java 

"../path" указывает, что выбранный путь находится в том же родительском каталоге, а не в нашей текущей директории.

Смежные вопросы