我正在研究这个无法正常工作的示例:
public class test extends Application
{
private void init(Stage primaryStage)
{
Group root = new Group();
primaryStage.setScene(new Scene(root));
String pillButtonCss = DX57DC.class.getResource("PillButton.css").toExternalForm();
// create 3 toggle buttons and a toogle group for them
ToggleButton tb1 = new ToggleButton("Left Button");
tb1.setId("pill-left");
ToggleButton tb2 = new ToggleButton("Center Button");
tb2.setId("pill-center");
ToggleButton tb3 = new ToggleButton("Right Button");
tb3.setId("pill-right");
final ToggleGroup group = new ToggleGroup();
tb1.setToggleGroup(group);
tb2.setToggleGroup(group);
tb3.setToggleGroup(group);
// select the first button to start with
group.selectToggle(tb1);
//////////////////////////////////////////
final VBox vbox = new VBox();
final Rectangle rect1 = new Rectangle(300, 300);
rect1.setFill(Color.ALICEBLUE);
final Rectangle rect2 = new Rectangle(300, 300);
rect2.setFill(Color.AQUA);
final Rectangle rect3 = new Rectangle(300, 300);
rect3.setFill(Color.AZURE);
tb1.setUserData(rect1);
tb2.setUserData(rect2);
tb3.setUserData(rect3);
group.selectedToggleProperty().addListener(new ChangeListener<Toggle>()
{
@Override
public void changed(ObservableValue<? extends Toggle> ov, Toggle toggle, Toggle new_toggle)
{
if (new_toggle == null)
{
//rect.setFill(Color.WHITE);
}
else
{
vbox.getChildren().addAll((Node[]) group.getSelectedToggle().getUserData());
//rect.setFill((Color) group.getSelectedToggle().getUserData());
}
}
});
///////////////////////////////////////////
HBox hBox = new HBox();
hBox.getChildren().addAll(tb1, tb2, tb3);
hBox.setPadding(new Insets(20, 20, 260, 20));
hBox.getStylesheets().add(pillButtonCss);
vbox.getChildren().add(hBox);
//vbox.getChildren().add(rect);
root.getChildren().add(vbox);
}
@Override
public void start(Stage primaryStage) throws Exception
{
init(primaryStage);
primaryStage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
我想创建几个要在其中存储数据的矩形(或其中的对象或对象)。我想使用按钮切换显示在用户面前的矩形(对象)。我实现的示例无法正常工作。你能告诉我实现这个的正确方法是什么吗?
最佳答案
您可以创建一个带有矩形的堆栈 Pane 和一个顶部带有文本的标签(如果这是您要存储的数据)。或者,您也可以将任何 Pane 的背景设置为彩色矩形。
然后将此 Pane 作为用户数据添加到相应的按钮,并将按钮用户数据添加到切换时的 VBox。
final StackPane rect1pane = new StackPane();
final Rectangle rect1 = new Rectangle(300, 300);
rect1pane.getChildren().add(rect1);
rect1pane.getChildren().add(new Label("Some text"));
tb1.setUserData(rect1pane);
切换属性监听器:
...
else{
//Delete rectangles added before ( or check if this one isnt already dispayed)
if(group.getSelectedToggle().getUserData() instanceof Node)
vbox.getChildren().add((Node)group.getSelectedToggle().getUserData());
}
如果您只想让示例代码正常工作,请更改:
vbox.getChildren().addAll((Node[]) group.getSelectedToggle().getUserData());
至
vbox.getChildren().addAll((Node) group.getSelectedToggle().getUserData());
因为您只是添加了所选切换按钮的矩形,所以它只是一个而不是数组。
单击后放大窗口以查看矩形(260px 底部填充没有帮助,因为即使水平盒子下方的空间为空,它仍然是水平盒子的一部分,无法被添加的矩形使用)或移动一下
group.selectToggle(tb1);
到 init 方法的最后一行;)
关于java - 如何使用按钮更改矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17633372/