JavaFX标签的鼠标点击事件

huangapple 未分类评论45阅读模式
英文:

JavaFX mouse click event for Labels

问题

this.setOnMouseClicked(e -> 
{
    TextField field = new TextField();
    this.getChildren().add(field);

    // Sets field as a label
    field.setOnKeyPressed(new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent key) {
            KeyCode k = key.getCode();
            if ((k.equals(KeyCode.ENTER))) {
                Label lab = new Label(field.getText());
                getChildren().add(lab);
                getChildren().remove(field);
            }
        }
    });

    // Removes textfield and label
    field.setOnKeyPressed(new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent ke) {
            KeyCode kc = ke.getCode();
            if ((kc.equals(KeyCode.ESCAPE))) {
                getChildren().remove(field);
            }
        }
    });
}); 
if (lab != null) {
    lab.setOnMouseEntered(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent e) {
            setStyle("-fx-background-color: #00FF00;");
        }
    });
}
英文:

I am trying to build a simple planner app using JavaFX. My current goal is to be able to:

  1. click on a panel of the calendar (already implemented)
  2. type in a task, hit enter and have it show up as a Label (already implemented)
  3. click on the currently placed labels and remove them from the calendar. (issue)

Step 3 is where I am having most trouble. I am confident that I am setting up my mouse event for the label correctly but when I click on one of the labels it runs the mouse event for the panel. I need a way to override the pane's mouse event so I can use the labels mouse event, but I'm not too sure how to go about that. Any feedback would be great!

this.setOnMouseClicked(e -&gt; 
    {
    	TextField field = new TextField();
    	this.getChildren().add(field);
    	
    	//sets field as a label
    	 field.setOnKeyPressed(new EventHandler&lt;KeyEvent&gt;() {
    	        @Override
    	        public void handle(KeyEvent key) {
    	            KeyCode k = key.getCode();
    	            if ((k.equals(KeyCode.ENTER))) {
    	            	Label lab = new Label(field.getText());
    	            	getChildren().add(lab);
    	            	getChildren().remove(field);
    	            }
    	        }
    	    });
    	 
    	 //removes textfield and label
    	 field.setOnKeyPressed(new EventHandler&lt;KeyEvent&gt;() {
 	        @Override
 	        public void handle(KeyEvent ke) {
 	            KeyCode kc = ke.getCode();
 	            if ((kc.equals(KeyCode.ESCAPE))) {
 	            	getChildren().remove(field);
 	            }
 	        }
 	    });  	 
    }); 
    if(lab != null)
    {
        lab.setOnMouseEntered(new EventHandler&lt;MouseEvent&gt;() {
            @Override
            public void handle(MouseEvent e) {
            	setStyle(&quot;-fx-background-color: #00FF00;&quot;);
            }
          });
    }

huangapple
  • 本文由 发表于 2020年4月4日 13:12:40
  • 转载请务必保留本文链接:https://java.coder-hub.com/61024060.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定