Group容器的使用与点击事件
讲解group容器,添加和移除子组件的方式,子组件设置位置等
创建普通的三个button,如果不设置布局位置默认在位置上显示最后一个
@Override
public void start(Stage primaryStage) throws Exception{
Button b1 = new Button("b1");
Button b2 = new Button("b2");
Button b3 = new Button("b3");
b1.setLayoutX(0);
b2.setLayoutX(200);
b3.setLayoutX(400);
Group group = new Group();
group.getChildren().addAll(b1,b2,b3);
Scene scene = new Scene(group);
primaryStage.setScene(scene);
primaryStage.setTitle("test");
primaryStage.setWidth(600);
primaryStage.setHeight(500);
primaryStage.show();
}
Children有一些对元素的增删改查的操作,查到的是node
group.getChildren()
给分组下的组件设置透明状态
group.setOpacity(0.5);
判断是否存在,只会判断头的位置(左上角)
(group.contains(0,0)
给子节点增加监听
group.getChildren().addListener(new InvalidationListener() {
@Override
public void invalidated(Observable observable) {
System.out.println(observable);
}
});
按钮的单击事件
b1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("---------------");
}
});
group组的改变事件
group.getChildren().addListener(new ListChangeListener<Node>() {
@Override
public void onChanged(Change<? extends Node> c) {
System.out.println(""+c.getList().size());
}
});
设置字体的文本和格式,如果过大会撑开
b1.setText("这是字体");
b1.setFont(Font.font("sans-serif",18));
设置背景颜色
BackgroundFill black = new BackgroundFill(Paint.valueOf("#809c05"),new CornerRadii(20),new Insets(10));
Background background = new Background(black);
b1.setBackground(background);
设置圆角
BackgroundFill black = new BackgroundFill(Paint.valueOf("#809c05"),new CornerRadii(20),Insets.EMPTY);
Background background = new Background(black);
b1.setBackground(background);
BorderStroke borderStroke = new BorderStroke(Paint.valueOf("#809c05"),BorderStrokeStyle.DOTTED,new CornerRadii(20),new BorderWidths(2));
Border border = new Border(borderStroke);
b1.setBorder(border);
设置字体颜色
b1.setTextFill(Paint.valueOf("FF66FF"));
备注:Paint.valueOf("FF66FF55") 前面代表颜色,后面55代表透明度
通过css的方式设置背景颜色等
b1.setStyle("-fx-background-color:CCCC00");
b1.setStyle("-fx-background-color:CCCC00"+";-fx-background-radius:20");
单机事件可以获取源头
//单击事件
b1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
Button button = (Button) event.getSource();
System.out.println(button.getText());
}
});
点击事件
双击事件可以根据getClickCount次数为2进行判定,点击事件不管左边还是 右边需要辨别一下。
b1.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
System.out.println("--》"+event.getButton().name());
System.out.println(event.getClickCount());
}
});
PRIMARY 左鼠标
SECONDARY 右鼠标
MIDDLE 滑轮
MouseEvent有
ANY -- 所有鼠标事件类型的通用超类型。
MOUSE_PRESSED --当按下鼠标按钮时发生此事件。这激活一个按下-拖动-释放手势,因此所有后续的鼠标事件直到 释放按钮被交付到相同的节点。
MOUSE_RELEASED --当释放鼠标按钮时发生此事件。这是交付指向被激活的按钮所在的节点 按-拖-放手势。
MOUSE_CLICKED --此事件发生时鼠标按钮已被点击(按下和
*在同一个节点上释放)。这个事件提供了一个类似按钮的行为
*到任何节点。请注意,即使是长时间的拖动也可以生成单击事件
*被传递到鼠标同时在其上的最顶层节点
*按下并释放)。
MOUSE_ENTERED_TARGET -- 当鼠标进入节点时发生此事件。这是冒泡的变体,
*也会被传递给所输入节点的所有父节点(除非它
*消费)。当通知鼠标进入一些节点
*不需要子事件,{@code MOUSE_ENTERED}事件处理程序应该
*被使用。
MOUSE_ENTERED --当鼠标进入节点时发生此事件。下发事件类型
*仅对输入的节点,如果父节点想要过滤或获取
*冒泡事件,他们需要使用{@code MOUSE_ENTERED_TARGET}。
MOUSE_EXITED_TARGET -- 当鼠标退出节点时发生此事件。 这是冒泡的变体, *也会被传递给退出节点的所有父节点(除非它 *消费)。 当通知鼠标退出一些节点时 *不需要子事件,{@code MOUSE_EXITED}事件处理程序应该 *被使用。
MOUSE_EXITED -- 当鼠标退出节点时发生此事件。 下发事件类型
*仅对退出的节点,如果父节点想要过滤它或获取
*冒泡事件,他们需要使用{@code MOUSE_EXITED_TARGET}。
MOUSE_MOVED --- 当鼠标在节点内移动而没有按钮时,将发生此事件 按下。 如果按下任何鼠标按钮,则MOUSE_DRAGGED事件 发生。
MOUSE_DRAGGED -- 当鼠标随按下的按钮移动时发生此事件。
*它被交付到按钮被按下的同一节点
*激活按-拖-放手势。 这是交付
*不管鼠标是否在节点的范围内。
DRAG_DETECTED -- 当鼠标退出节点时发生此事件。 这是冒泡的变体, *也会被传递给退出节点的所有父节点(除非它 *消费)。 当通知鼠标退出一些节点时 *不需要子事件,{@code MOUSE_EXITED}事件处理程序应该 *被使用。
键盘按下取消事件
b1.setOnKeyPressed(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
System.out.println("按下..");
}
});
b1.setOnKeyReleased(new EventHandler<KeyEvent>() {
@Override
public void handle(KeyEvent event) {
System.out.println("抬起...");
}
});
获取按键的名称
System.out.println("按下Text.."+event.getText());//小写
System.out.println("按下Name.."+event.getCode().getName());//大写
设置快捷键
1.常用
//ctrl+ALT+c
KeyCodeCombination kc1 = new KeyCodeCombination(KeyCode.C, KeyCombination.ALT_DOWN, KeyCombination.CONTROL_DOWN);
Mnemonic mnemonic = new Mnemonic(b1, kc1);
scene.addMnemonic(mnemonic);
2.
KeyCharacterCombination o = new KeyCharacterCombination("o", KeyCombination.ALT_DOWN);
Mnemonic mnemonic = new Mnemonic(b1, o);
scene.addMnemonic(mnemonic);
KeyCodeCombination combination = new KeyCodeCombination(KeyCode.Y, KeyCombination.ALT_DOWN);
//alt+y
scene.getAccelerators().put(combination, new Runnable() {
@Override
public void run() {
b1.fire();//这个会调用你的监听方法,回调
System.out.println("自己的方法");
}
});
//点击事件的方法
b1.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
System.out.println("点击了按钮");
}
});