我使用了3个HBox,每个HBox包含两个浇头。然后,我将HBoxes添加到ToppingsOptionPane中。
我需要做什么来对齐复选框?
我尝试使用2个VBox,每个VBox包含三个顶部,第一个VBox位于中间居中,第二个VBox位于中间居中。第二个VBox最终显示在第一个VBox下方,而不是旁边。所以那行不通。
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import java.text.NumberFormat;
//************************************************************************
// ToppingsOptionPane.java
// Shows use of check boxes.
//************************************************************************
public class ToppingsOptionPane extends VBox{
private Text phrase;
private double totalPrice;
private CheckBox pepperoni, olives, bacon, ham, mushroom, meatballs;
NumberFormat fmt1 = NumberFormat.getCurrencyInstance();
//--------------------------------------------------------------------
// Constructor. Sets up pane with Text object and check boxes
// that determine the price of the pizza.
//--------------------------------------------------------------------
public ToppingsOptionPane(){
totalPrice = 10;
phrase = new Text("Pizza Cost: " + fmt1.format(totalPrice));
phrase.setFont(new Font("Helvetica", 20));
pepperoni = new CheckBox("Pepperoni");
pepperoni.setOnAction(this::processCheckBoxAction);
olives = new CheckBox("Olives");
olives.setOnAction(this::processCheckBoxAction);
HBox toppings1 = new HBox(pepperoni,olives);
toppings1.setAlignment(Pos.CENTER);
toppings1.setSpacing(20);
bacon = new CheckBox("Bacon");
bacon.setOnAction(this::processCheckBoxAction);
ham = new CheckBox("Ham");
ham.setOnAction(this::processCheckBoxAction);
HBox toppings2 = new HBox(bacon,ham);
toppings2.setAlignment(Pos.CENTER);
toppings2.setSpacing(20);
mushroom = new CheckBox("Mushroom");
mushroom.setOnAction(this::processCheckBoxAction);
meatballs = new CheckBox("Meatballs");
meatballs.setOnAction(this::processCheckBoxAction);
HBox toppings3 = new HBox(mushroom,meatballs);
toppings3.setAlignment(Pos.CENTER);
toppings3.setSpacing(20);
setSpacing(20); // between text and checkboxes
getChildren().addAll(toppings1,toppings2,toppings3,phrase);
}
//--------------------------------------------------------------------
// Event handler. Updates price of the pizza.
//--------------------------------------------------------------------
public void processCheckBoxAction(ActionEvent event){
int sum = 0;
double toppings = 0;
if (pepperoni.isSelected())
sum+=1;
if (olives.isSelected())
sum+=1;
if (bacon.isSelected())
sum+=1;
if (ham.isSelected())
sum+=1;
if (mushroom.isSelected())
sum+=1;
if (meatballs.isSelected())
sum+=1;
toppings = sum * 0.50;
phrase.setText("Pizza Cost: " + fmt1.format(totalPrice + toppings));
}
}
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.stage.Stage;
//************************************************************************
// PizzaToppings.java
// Shows use of check boxes.
//************************************************************************
public class PizzaToppings extends Application {
//--------------------------------------------------------------------
// Creates and shows program window
//--------------------------------------------------------------------
public void start(Stage primaryStage){
ToppingsOptionPane pane = new ToppingsOptionPane();
pane.setAlignment(Pos.CENTER);
pane.setStyle("-fx-background-color: wheat");
Scene scene = new Scene(pane,400,250);
primaryStage.setTitle("Pizza Cost");
primaryStage.setScene(scene);
primaryStage.show();
}
//--------------------------------------------------------------------
// Main method. Calls launch method.
//--------------------------------------------------------------------
public static void main(String[] args){
launch(args);
}
}
答案 0 :(得分:2)
首先,如果有机会,我真的建议您使用FXML,它确实有助于解决此类问题。解决问题的方法实际上非常简单,尝试将JavaFX视为一款大型俄罗斯方块游戏,我所做的就是使用两个Vbox,每个Vbox包含3个元素,然后将Vbox放入HBox中。
VBox toppings1V = new VBox(pepperoni, bacon, mushroom);
toppings1V.setSpacing(20);
VBox toppings2V = new VBox(olives, ham, meatballs);
toppings2V.setSpacing(20);
HBox hBox = new HBox(toppings1V, toppings2V);
hBox.setSpacing(30);
hBox.setAlignment(Pos.CENTER);