【发布时间】:2021-01-08 04:13:18
【问题描述】:
我使用了 3 个 HBox,每个 HBox 包含两个浇头。然后我将 HBoxes 添加到 ToppingsOptionPane。
我需要做什么来对齐复选框?
我尝试使用 2 个包含三个顶部的 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);
}
}
【问题讨论】:
-
解决布局问题时,第一步是了解所有可用布局的概览 - 通过 api 文档(和/或适当的教程)了解哪些可以处理什么。顺便说一句:扩展布局(几乎 - 但肯定在这里)总是错误的方法,它们旨在使用。