2016-09-25 4 views
1

Для одного из моих проектов Java я использую JavaFX для создания кассового аппарата. Чтобы увидеть картину GUI, пожалуйста click here.Как вы скрываете элементы в графическом интерфейсе сразу после запуска класса контейнера JavaFX?

Как показано в графическом интерфейсе пользователя, программа запросит ввод пользователя, чтобы найти много элементов пользователь купил, сколько пользователь заплатил, и будет отображать необходимые изменения в метка. Тем не менее, я хотел бы скрыть некоторые элементы этого пользовательского интерфейса в определенных точках. В настоящее время, я знаю, как скрыть метки и кнопки, используя следующие команды:

label.setVisible(false); 
button.setVisible(false); 

Однако то, что мне нужно здесь иметь все элементы ниже этикеток говоря + 7.00% Sales Tax начинает невидимое право, когда я бег GUIController класса так что для внесения этих изменений мне не нужно нажимать дополнительные кнопки. Итак, у вас есть какие-то предложения? Любая помощь приветствуется!

CashRegister (содержит основной класс)

package cashregister; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

/** 
* 
* @author Sammy 
*/ 
public class CashRegister extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("RegisterGUI.fxml")); 

     Scene scene = new Scene(root); 

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

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 

} 

RegisterGUIController

(я пропущены все "фактический" код так, что я не смотрю, как я изменял мой проект)

package cashregister; 

import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.TextField; 

/** 
* 
* @author Sammy 
*/ 
public class RegisterGUIController implements Initializable { 

    @FXML 
    private Label title, lblSubtotal, lblTax, lblLine, lblTotalText, lblTotal,lblChangeText, lblChange; 

    @FXML 
    private Button handleNoodle, handlePizza, handleWing, handlePie, handleIce; 

    @FXML 
    private TextField inputNoodle, inputPizza, inputWings, inputPies, inputIce, inputPayment; 

    @FXML 
    private void handleNoodle(ActionEvent event) { 
    } 

    @FXML 
    private void handlePizza(ActionEvent event) {  
    } 

    @FXML 
    private void handleWing(ActionEvent event) {  
    } 

    @FXML 
    private void handlePie(ActionEvent event) { 
    } 

    @FXML 
    private void handleIce(ActionEvent event) { 


    } 

    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
    }  

} 

РегистрацияGUI

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

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

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="415.0" prefWidth="320" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="cashregister.RegisterGUIController"> 
    <children> 
     <Button fx:id="handlePizza" layoutX="27.0" layoutY="107.0" onAction="#handlePizza" text="Pizza" AnchorPane.topAnchor="110.0" /> 
     <Label fx:id="title" layoutX="118.0" layoutY="14.0" minHeight="16" minWidth="69" text="Cash Register" textAlignment="CENTER" AnchorPane.rightAnchor="118.0"> 
     <font> 
      <Font name="System Bold" size="14.0" /> 
     </font></Label> 
     <Label layoutX="39.0" layoutY="40.0" text="Please select the items you would like to buy" /> 
     <Button fx:id="handlePie" layoutX="27.0" layoutY="169.0" mnemonicParsing="false" onAction="#handlePie" text="Blueberry Pie" AnchorPane.topAnchor="180.0" /> 
     <Button fx:id="handleWing" layoutX="27.0" layoutY="138.0" mnemonicParsing="false" onAction="#handleWings" text="Chicken Wings" AnchorPane.topAnchor="145.0" /> 
     <Button fx:id="handleNoodle" layoutX="27.0" layoutY="75.0" mnemonicParsing="false" onAction="#handleNoodles" text="Noodles" AnchorPane.topAnchor="75.0" /> 
     <Button fx:id="handleIce" layoutX="28.0" layoutY="199.0" mnemonicParsing="false" onAction="#handleIce" text="Ice Cream" AnchorPane.topAnchor="215.0" /> 
     <Label fx:id="lblLine" layoutX="21.0" layoutY="308.0" text="_______________________________________________________" AnchorPane.bottomAnchor="95.0" /> 
     <Label layoutX="57.0" layoutY="210.0" text="Subtotal:" underline="true" AnchorPane.bottomAnchor="121.0" AnchorPane.leftAnchor="57.0"> 
     <font> 
      <Font size="12.5" /> 
     </font> 
     </Label> 
     <TextField fx:id="inputPayment" layoutX="143.0" layoutY="282.0" promptText="Enter Your Payment Here" AnchorPane.bottomAnchor="43.0" /> 
     <Label fx:id="lblubtotal" layoutX="113.0" layoutY="210.0" text="\$0.00" AnchorPane.bottomAnchor="121.0" AnchorPane.leftAnchor="113.0"> 
     <font> 
      <Font size="12.5" /> 
     </font> 
     </Label> 
     <Label fx:id="lblTax" layoutX="48.0" layoutY="303.0" text="+ 7.00% Sales Tax" AnchorPane.bottomAnchor="98.0"> 
     <font> 
      <Font size="12.5" /> 
     </font> 
     </Label> 
     <Label fx:id="lblTotalText" layoutX="14.0" layoutY="272.0" text="Total:" underline="true" AnchorPane.bottomAnchor="60.0"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </Label> 
     <Label fx:id="lblTotal" layoutX="57.0" layoutY="272.0" text="\$0.00" AnchorPane.bottomAnchor="60.0"> 
     <font> 
      <Font size="14.0" /> 
     </font> 
     </Label> 
     <Button fx:id="handleDone" layoutX="177.0" layoutY="272.0" mnemonicParsing="false" onAction="#handleButton" text="Done Shopping" AnchorPane.bottomAnchor="118.0"> 
     <effect> 
      <DropShadow blurType="GAUSSIAN" spread="0.1" /> 
     </effect> 
     </Button> 
     <Label fx:id="lblChangeText" layoutX="38.0" layoutY="295.0" text="Your Change:" AnchorPane.bottomAnchor="36.0"> 
     <font> 
      <Font size="13.0" /> 
     </font> 
     </Label> 
     <Label fx:id="lblChange" layoutX="127.0" layoutY="296.0" text="\$0.00" AnchorPane.bottomAnchor="36.0" /> 
     <TextField fx:id="inputNoodles" layoutX="143.0" layoutY="75.0" onAction="#inputNoodles" promptText="# of Bowls" /> 
     <TextField fx:id="inputPizza" layoutX="143.0" layoutY="110.0" onAction="#inputPizza" promptText="# of Boxes" /> 
     <TextField fx:id="inputWings" layoutX="143.0" layoutY="145.0" onAction="#inputWings" promptText="# of Plates" /> 
     <TextField fx:id="inputPies" layoutX="143.0" layoutY="180.0" onAction="#inputPies" promptText="# of Pies" /> 
     <TextField fx:id="inputIce" layoutX="143.0" layoutY="215.0" promptText="# of Containers" /> 
    </children> 
</AnchorPane> 
+2

Если вы используете fxml, установите для параметра «visible» значение false. Кроме того, вы могли бы использовать другой фото-сайт? Как imgur? –

+0

Вы не предоставили изображения по ссылке. Вы должны поделиться ссылкой, если вы разместите ссылку здесь, чтобы кто-нибудь мог ее увидеть без предварительного запроса от вас. – Vampire

+0

Какой контейнерный класс вы используете? – donkon

ответ

1

Фактически вы можете поместить необходимый код в метод initialize, который запускается только после того, как графический интерфейс полностью настроен. Это означает, что это будет работать как contructor, но не будет генерировать nullPointerError, потому что GUI уже будет существовать к моменту выполнения этой части кода.

Например, вы могли бы сделать это в RegisterGUIController:

@Override 
    public void initialize(URL url, ResourceBundle rb) { 
     lblTax.setVisible(false); 
     lblLine.setVisible(false); 
     lblTotalText.setVisible(false); 
     lblTotal.setVisible(false); 
     lblChangeText.setVisible(false); 
     lblChange.setVisible(false); 
     inputPayment.setVisible(false); 
    } 

Удачи в вашем проекте!

+2

Вы также можете просто добавить 'visible =" false "' в файл fxml на каждом узле, который вы хотите скрыть. –