2015-05-01 3 views
0

В нашем классе мы получили задание, мы должны создать графический интерфейс для пиццы, используя флажки для начинки и переключатели для размера и типа пиццы.Использование обработчика событий в JAVA FX

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

В моей программе я хочу, чтобы пользователь выбирал свою начинку, размер пиццы и тип пиццы. После того, как пользователь выполнит указанную задачу, я хочу, чтобы они щелкнули процесс выбора, и информация вместе с ценами будет добавлена ​​в новую текстовую область.

К сожалению, даже при вызове строки (где я держу все) в новой текстовой области я все равно получаю пустое место.

Таким образом, я оставлен, чтобы поверить в то, что я неправильно вызвал действие в обработчике. Я также получаю предупреждение «параметр события не используется»

Я вырезал снипп моего кода ниже, так как вы можете видеть, что я пытаюсь сохранить все данные в тексте ordertext, а затем называть его в своем новом тексте зона заказов. Я надеюсь, кто-то может заметить ошибку, которую я сделал, или дать мне некоторое представление о том, что я пропускаю. Спасибо

TextArea orderscreen = new TextArea(); 
    orderscreen.setPrefColumnCount(50); 
    orderscreen.setPrefRowCount(7);  
    grid.add(orderscreen, 0, 4); 
    orderscreen.setText(ordertext); 

      btn.setOnAction((ActionEvent event) -> { 
       String mytoppings = ""; 
       double mytopcost = 0.0; 

       if (chkTom.isSelected()) { 
        mytoppings = mytoppings + "Tomato "; // Topping 
        mytopcost += 1.50; // price 
       } 

       if (chkGP.isSelected()) { 
        mytoppings = mytoppings + "Green Peppers "; // Topping 
        mytopcost += 1.50; // pice 
       } 

       if (chkBO.isSelected()) { 
        mytoppings = mytoppings + "Black Olives "; // Topping 
        mytopcost += 1.50; // pice 
       } 

       if (chkMR.isSelected()) { 
        mytoppings = mytoppings + "MushRooms "; // Topping 
        mytopcost += 1.50; // pice 
       } 

       if (chkEC.isSelected()) { 
        mytoppings = mytoppings + "Extra Cheese "; // Topping 
        mytopcost += 1.50; // pice 
       } 

       if (chkPep.isSelected()) { 
        mytoppings = mytoppings + "Peppeoni "; // Topping 
        mytopcost += 1.50; // pice 
       } 

       if (chkSS.isSelected()) { 
        mytoppings = mytoppings + "Sausage "; // Topping 
        mytopcost += 1.50; // pice 

       } 
       else { 
        mytoppings = mytoppings + "No toppings selected "; 
       } 


       //Pizza Types 

       String mypizzatype = ""; 
       // rbTC.setOnAction(e -> { 
       if (rbTC.isSelected()) { 
        mypizzatype = mypizzatype + "Thin Crust "; // Type 
       } 
       // }); 

       //rbMC.setOnAction(e -> { 
       if (rbMC.isSelected()) { 
        mypizzatype = mypizzatype + "Medium Crust "; // Type 
       } 
       // }); 

       if (rbP.isSelected()) { 
        mypizzatype = mypizzatype + "Pan "; // Type 
       } 

       // PIZZA SIZES 
       String mypizzasize = ""; 
       Double smpzcost = 6.50; 
       Double mdpzcost = 8.50; 
       Double lgpzcost = 10.00; 

       if (rbSM.isSelected()) { 
        mypizzatype = mypizzasize + "Small "; // Type 
        order = smpzcost; 
       } 

       if (rbMD.isSelected()) { 
        mypizzatype = mypizzasize + "Medium "; // Type 
        order = mdpzcost; 
       } 

       if (rbLG.isSelected()) { 
        mypizzatype = mypizzasize + "Large "; // Type 
        order = lgpzcost; 
       } 

       ordertext = ("Your Order: " 
         + "\nPizza type: " + mypizzatype 
         + "\nPizza Size: " + mypizzasize 
         + "\nToppings: " + mytoppings 
         + "\nAmount Due: " + (order + mytopcost)); 
       System.out.println("Order Processed"); 
       //orderscreen.clear(); // WILL CLEAR 
    }); 
+0

Oh и, пожалуйста, извините Println («заказ обрабатывается»), который был я устраняю неполадки –

ответ

0

Я просто зафиксировал проблему

orderscreen.setText(ordertext); 

необходимо заменить

ordertext = ("Your Order: " 
    + "\nPizza type: " + mypizzatype 
    + "\nPizza Size: " + mypizzasize 
    + "\nToppings: " + mytoppings 
    + "\nAmount Due: " + (order + mytopcost)); 
orderscreen.setText(ordertext); 

я также необходимо изменить

mypizzatype = mypizzasize в mypizzasize= mypizzasize

0

Нет необходимости в обработчиках событий. в javafx вы можете использовать привязки.

Я создал простую демонстрацию, которая показывает, как связать с графическим интерфейсом управления (RadioButtons, ChoiceBox) собственности в классе модели и привязать его к TextArea:

package demo; 

import javafx.application.Application; 
import javafx.beans.binding.StringBinding; 
import javafx.beans.property.BooleanProperty; 
import javafx.beans.property.ReadOnlyObjectProperty; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 
import javafx.scene.Scene; 
import javafx.scene.control.ChoiceBox; 
import javafx.scene.control.RadioButton; 
import javafx.scene.control.TextArea; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.HBox; 
import javafx.stage.Stage; 

class User { 
    private StringProperty order = new SimpleStringProperty(); 

    public String getOrder() { 
     return order.get(); 
    } 

    public void setOrder(String order) { 
     this.order.set(order); 
    } 

    public StringProperty orderProperty() { 
     return order; 
    } 
} 

public class Demo extends Application { 

    private User user = new User(); 

    @Override 
    public void start(Stage stage) throws Exception { 

     RadioButton tomatoButton = new RadioButton("Tomato"); 
     RadioButton pepperButton = new RadioButton("Pepper"); 
     RadioButton mushroomButton = new RadioButton("Mushrooms"); 

     ChoiceBox<String> pizzaType = new ChoiceBox<String>(); 
     pizzaType.getItems().addAll("", "Small", "Medium", "Large"); 
     pizzaType.getSelectionModel().selectFirst(); 

     HBox topHBox = new HBox(15.0, tomatoButton, pepperButton, mushroomButton, pizzaType); 

     // create custom Binding that binds selection of radio buttons and choice box 
     StringBinding orderBinding = createOrderBinding(tomatoButton.selectedProperty(), pepperButton.selectedProperty(), mushroomButton.selectedProperty(), pizzaType.getSelectionModel().selectedItemProperty()); 
     // bind orderBinding to orderProperty of User 
     user.orderProperty().bind(orderBinding); 

     TextArea orderArea = new TextArea(); 
     // bind orderProperty of User to textProperty of TextArea 
     orderArea.textProperty().bindBidirectional(user.orderProperty()); 

     BorderPane root = new BorderPane(); 
     root.setTop(topHBox); 
     root.setCenter(orderArea); 

     Scene scene = new Scene(root, 400, 300); 
     stage.setScene(scene); 
     stage.show(); 
    } 

    /** 
    * Creates StringBinding between 4 provided arguments. Binding means that when value of one bound property is changed the whole binding is recomputed in computeValue method. 
    * The value of computeValue is bound to User.orderProperty 
    */ 
    public StringBinding createOrderBinding(BooleanProperty tomato, BooleanProperty pepper, BooleanProperty mushroom, ReadOnlyObjectProperty<String> selectedPizzaType) { 
     StringBinding binding = new StringBinding() { 
      { 
       // bind 4 provided properties. 
       super.bind(tomato, pepper, mushroom, selectedPizzaType); 
      } 

      /* 
      * Fires each time bound property is modified. 
      */ 
      @Override 
      protected String computeValue() { 
       StringBuilder sb = new StringBuilder("Pizza content:\n"); 

       if (tomato.get()) 
        sb.append("\tTomato\n"); 
       if (pepper.get()) 
        sb.append("\tPepper\n"); 
       if (mushroom.get()) 
        sb.append("\tMushroom\n"); 

       sb.append("Pizza type:\n").append("\t" + selectedPizzaType.get()); 
       return sb.toString(); 
      } 
     }; 
     return binding; 
    } 

    public static void main(String[] args) { 
     Application.launch(args); 
    } 
} 
+0

Это действительно здорово. К сожалению, наша учебная программа в колледже выделила только две недели для «крушения курса», охватывающего Java FX, поэтому многие важные и полезные элементы управления не были охвачены. –