CheckBox的盒子和标签有哪些不同的事件?(JavaFX)

时间:2015-05-07 22:12:57

标签: checkbox javafx

我希望仅在单击框时才会选中CheckBox。如果点击了CheckBox的标签,我想执行不同的操作,但未选中此CheckBox。怎么可能实现这个目标?

enter image description here

我制作了单独的复选框和标签。但我无法通过复选框更改标签的伪类。他们在列表视图中。以下是代码的一部分:

HBox todoHBox=new HBox(0);
CheckBox todoCheckBox=new CheckBox();
Label todoLabel=new Label(item.getName());
Label timeLabel=new Label();
Region rSpring = new Region(); 
todoHBox.setPrefWidth(300);
todoHBox.setHgrow(rSpring, Priority.ALWAYS);
todoHBox.setHgrow(timeLabel, Priority.ALWAYS);
todoHBox.setHgrow(todoCheckBox, Priority.NEVER);
timeLabel.setMinWidth(60);
timeLabel.getStyleClass().add("time-label");
todoLabel.getStyleClass().add("todo-label");
todoHBox.getChildren().addAll(todoCheckBox,todoLabel,rSpring,timeLabel);
todoHBox.setMargin(timeLabel, new Insets(3,0,0,0));
PseudoClass pseudo = PseudoClass.getPseudoClass("task-done");
todoCheckBox.selectedProperty().addListener(e->{
if(todoCheckBox.isSelected()){
       todoLabel.pseudoClassStateChanged(pseudo, true);
       }else{
             todoLabel.pseudoClassStateChanged(pseudo, false);
              }});
             setGraphic(todoHBox);

1 个答案:

答案 0 :(得分:0)

只需使用两个控件:CheckBox没有文字和Label。使用处理程序在setOnMouseClicked(...)上调用Label,并执行您需要的操作。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class CheckBoxWithLabelExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        CheckBox checkBox = new CheckBox();
        checkBox.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> 
            System.out.println("Check box is now "+(wasSelected ? "not ":"") + "selected"));
        Label label = new Label("Make Task");
        label.setOnMouseClicked(e -> System.out.println("Text clicked"));
        HBox control = new HBox(checkBox, label);

        Scene scene = new Scene(new StackPane(control), 350, 75);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}