我想创建用于切换面板的组合框。例如,我想创建几个不同颜色的面板,并使用组合框,我只想让一个面板可见:
import javafx.application.Application;
import static javafx.application.Application.launch;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class MainApp extends Application
{
@Override
public void start(Stage primaryStage)
{
final ComboBox comboBox = new ComboBox();
comboBox.getItems().addAll(
"Bar Chart",
"Pie Chart");
comboBox.setValue("Bar Chart");
final Label label = new Label();
final StackPane stack = new StackPane();
Button btn = new Button();
btn.setText("Read comboBox");
btn.setOnAction(new EventHandler<ActionEvent>()
{
@Override
public void handle(ActionEvent event)
{
label.setText("selectd: " + comboBox.getValue());
stack.getChildren();
}
});
stack.getChildren().add(0, new Rectangle(100,100,Color.BLUE));
stack.getChildren().add(1, new Rectangle(100,100,Color.GREEN));
VBox vBox = new VBox();
vBox.setPadding(new Insets(5, 5, 5, 5));
vBox.setSpacing(5);
vBox.getChildren().addAll(label, comboBox, btn);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args)
{
launch(args);
}
}
你能帮我与代码,这将用于切换可见面板见解组合框更改侦听器。
试试这个:
public class MainApp extends Application {
@Override
public void start(Stage primaryStage) {
Rectangle blueRectangle = new Rectangle(100,100, Color.BLUE);
Rectangle grinRectangle = new Rectangle(100,100, Color.GREEN);
StackPane stackPane = new StackPane();
stackPane.getChildren().add(0, blueRectangle);
stackPane.getChildren().add(1, grinRectangle);
ComboBox<String> comboBox = new ComboBox<>();
comboBox.getItems().addAll("Blue rectangle", "Green rectangle");
comboBox.setValue("Green rectangle");
comboBox.setOnAction(e -> {
switch (comboBox.getValue()) {
case "Blue rectangle":
blueRectangle.toFront();
break;
case "Green rectangle":
grinRectangle.toFront();
break;
}
});
VBox vBox = new VBox();
vBox.setAlignment(Pos.CENTER);
vBox.setPadding(new Insets(5, 5, 5, 5));
vBox.setSpacing(10);
vBox.getChildren().addAll(comboBox, stackPane);
Scene scene = new Scene(vBox, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
有很多方法可以实现这一点,您可以通过@Vitomir将ComboBox的值硬编码到switch case
这里还有一个示例,它认为矩形的添加到StackPane的顺序与值添加到ComboBox的顺序相同,无论何时选择组合框(或选择并按下按钮),选定的矩形都是可见的,其余的都是不可见的。
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class ComboBoxIssue extends Application {
@Override
public void start(Stage primaryStage) {
final ComboBox comboBox = new ComboBox();
comboBox.getItems().addAll("Show Blue", "Show Green");
final Label label = new Label();
final StackPane stack = new StackPane();
Button btn = new Button();
btn.setText("Read comboBox");
/**
* Uncomment this to run on button selection
*
*/
/*btn.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
setVisibility(stack, comboBox, label);
}
});*/
comboBox.getSelectionModel().selectedIndexProperty()
.addListener((ObservableValue<? extends Number> observable,
Number oldValue, Number newValue) ->
setVisibility(stack, comboBox, label)
);
stack.getChildren().add(new Rectangle(100, 100, Color.BLUE));
stack.getChildren().add(new Rectangle(100, 100, Color.GREEN));
// Placing it after adding rectangle to stack
// will trigger the changelistener to show default rectangle
comboBox.setValue("Show Blue");
VBox vBox = new VBox();
vBox.setPadding(new Insets(5, 5, 5, 5));
vBox.setSpacing(5);
vBox.getChildren().addAll(label, comboBox, btn, stack);
StackPane root = new StackPane();
root.getChildren().add(vBox);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
public void setVisibility(Pane pane, ComboBox comboBox, Label label) {
//Set Label
label.setText("selectd: " + comboBox.getValue());
// Make all children invisible
for (Node node : pane.getChildren()) {
node.setVisible(false);
}
// make the selected rectangle visible
int selectedIndex = comboBox.getSelectionModel()
.selectedIndexProperty().getValue();
pane.getChildren().get(selectedIndex).setVisible(true);
}
public static void main(String[] args) {
launch(args);
}
}
我有一个雇主组合。选择雇主后,表格中会填入特定于雇主的数据: 下面是它绑定到的属性和检查表是否脏的方法。如果表是脏的,则提示用户如果他们改变雇主,改变将丢失: 一切似乎都正常工作: 用户选择更新表的雇主('KMH')。 用户对表进行更改。 用户然后选择不同的雇主('MPC') 提示用户更改将丢失 用户选择“否”并且Can火雇主返回“假” 选择雇主不改变(跳过if{}块) 然而,在GUI中,雇主选项
问题内容: 在对话框中,如果选中了某个组合,则需要显示一组控件,否则显示另一组控件。即我需要2层,并且当组合被选中/未选中时,我需要在它们之间切换。我怎样才能做到这一点? 问题答案: CardLayout 为此,如下所示。
我有一个带有组合框的xaml。由于某种原因,我在那里有一些项目,我不能选择它们,当我选择一个项目时,它通常不允许我更改我的选择,如果它更改了,它仅适用于某些值。这是代码: 我希望我写的很清楚,因为我把它从电脑复制到了手机上。基本上,我有所有的用户,并按部门对他们进行分类。用户只能看到他所在部门的文档,并且可以选择绑定词典中可用的文档。如果不可用,组合框中的项目将为红色且不可检查。这个管用。唯一没有
几个小时寻找答案后,我终于放弃了。我有一个包含以下组合框的FXML表单: 它注入到 JavaFX 控制器类中: 该组合显示了使用Eclipselink 2.7和JPA 2.2从嵌入式H2数据库加载的Tobra(在西班牙语中代表Tipo de Obra)列表。 我不会向用户展示Tobra的价值。toString,相反,我在初始化中设置了一个转换器: 我有一个实现<code>Task的内部类 当然,当
我在一个表单中有两个组合框。 当combobox 2中的列表更新时,我希望combobox 1中选定的值发生变化。 例如:ComboBox1 包含移动公司的名称,ComboBox2 包含该公司所有移动电话的列表。
我有两个组合框。我正在填充这样的两个组合框。组合框1和2的名称是cmbpartyName和cmbprefPT2。 在这里,我从combox1中选择一个值,在它所选的索引更改事件中,如下所示。 由于两个组合框具有相同的值,如何从第二个组合框cmbPrefPT2中删除第一个组合框的选定值?