我希望仅在单击框时才会选中CheckBox
。如果点击了CheckBox
的标签,我想执行不同的操作,但未选中此CheckBox
。怎么可能实现这个目标?
我制作了单独的复选框和标签。但我无法通过复选框更改标签的伪类。他们在列表视图中。以下是代码的一部分:
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);
答案 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);
}
}