java - 我希望在 javaFX 中对齐复选框
问题描述
我使用了 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);
}
}
解决方案
首先,如果有机会,我真的建议您使用 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);
推荐阅读
- amazon-web-services - 如何删除失败的 .ebextensions 脚本?
- angular - ionic : 离子后退按钮上的清除文本字段
- javascript - 如何设置一个逻辑以从给定代码呈现组件
- angular11 - core.js:6210 错误类型错误:无法读取 null 的属性“writeValue”
- pentaho-report-designer - 有没有办法在日期选择器中禁用未来日期而不在 pentaho 报表设计器中使用 JavaScript 和 jquery
- valueerror - 网格搜索期间的值错误 - epochs 不是合法参数
- c# - 如何在 C# 的计时器处删除小数点
- javascript - 我们如何在本机反应中同时检测两个触摸事件
- css - 尝试使用 Javascript 更改 HTML 元素的类,但无法正确更新
- javascript - 评论缓存是一种好的做法,我应该如何正确地做呢?