Group容器的使用与点击事件
讲解group容器,添加和移除子组件的方式,子组件设置位置等
| @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().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 |
| MOUSE_EXITED |
| *仅对退出的节点,如果父节点想要过滤它或获取 |
| *冒泡事件,他们需要使用{@code MOUSE_EXITED_TARGET}。 |
| |
| MOUSE_MOVED |
| MOUSE_DRAGGED |
| *它被交付到按钮被按下的同一节点 |
| *激活按-拖-放手势。 这是交付 |
| *不管鼠标是否在节点的范围内。 |
| |
| DRAG_DETECTED |
键盘按下取消事件
| 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.常用 |
| |
| |
| |
| 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); |
| |
| 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("点击了按钮"); |
| } |
| }); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2019-05-28 maven插件慢的解决方案