我希望在javaFX中对齐复选框
我需要创建一个带有对齐复选框的GUI,如下图所示: 我尝试的代码会导致以下图像: 我用了3个HBox,每个HBox包含两个浇头。然后我将HBox添加到ToppingOptions窗格 我需要做什么来对齐复选框 我尝试使用两个VBox,每个VBox包含三个浇头,第一个VBox位于左中,第二个VBox位于右中。第二个VBox最终显示在第一个VBox下,而不是它旁边。所以那没用我希望在javaFX中对齐复选框,java,javafx,Java,Javafx,我需要创建一个带有对齐复选框的GUI,如下图所示: 我尝试的代码会导致以下图像: 我用了3个HBox,每个HBox包含两个浇头。然后我将HBox添加到ToppingOptions窗格 我需要做什么来对齐复选框 我尝试使用两个VBox,每个VBox包含三个浇头,第一个VBox位于左中,第二个VBox位于右中。第二个VBox最终显示在第一个VBox下,而不是它旁边。所以那没用 import javafx.event.ActionEvent; import javafx.geometry.Pos;
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));
}
}
首先,如果有机会的话,我真的建议您使用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);
首先,如果有机会,我真的建议您使用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);
可能:)但请注意:如果初始条件不成立,像这样的嵌套布局可能会中断(这里是f.i.,如果其中一个检查的字体比其他检查的字体大得多)。最好试着找到一个能提供您所需要的确切服务的布局(我猜这里是一个网格窗格)我不明白如何从一种编码(Java)转换到另一种编码(FXML)会突然让您理解JavaFX布局的概念。可能:)但请注意:如果初始条件不成立,像这样的嵌套布局可能会中断(这里是f.i.,如果其中一个检查的字体比其他检查的字体大得多)。最好尝试找到一个布局,它提供您所需的确切服务(我猜这里是一个网格窗格)。我不明白从一种编码(Java)切换到另一种编码(FXML)会如何突然让您理解JavaFX布局的概念,第一步是获得所有可用布局的概述-通过api文档(和/或适当的教程)了解哪些布局可以处理哪些布局。顺便说一句:扩展版面(几乎-但在这里肯定)总是错误的方法,它们是用来解决版面问题的。解决版面问题时,第一步是获得所有可用版面的概述-通过api文档(和/或适当的教程)了解哪些可以处理哪些问题。顺便说一句:扩展布局(几乎是,但在这里肯定是)总是错误的方法,它们是用于使用的。