Group容器的使用与点击事件-javafx

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("点击了按钮");
            }
        });
posted @ 2022-05-28 18:38  三号小玩家  阅读(194)  评论(0编辑  收藏  举报
Title
三号小玩家的 Mail: 17612457115@163.com, 联系QQ: 1359720840 微信: QQ1359720840