我正在构建一个Java应用程序。这个应用程序是一个典型的“油漆”应用程序,你可以选择一种颜色,并在画布上绘制。除了...我将有一个圆圈数组分布在画布的顶部。我希望这些圆立即改变颜色,如果,当用户正在绘制和鼠标得到圆的X(10)个像素(其中X是绘制的线的宽度除以2)。
这是我的密码。我有一张画布是一组的一部分。我还创建了一个圆圈节点,并将其作为组的一部分。我想我需要以某种方式创建一个鼠标事件,当用户在每一个圆圈附近绘图时,该事件就会触发。我最终将有许多圈在画布上,但我开始只有1个测试目的。
package paintingcircles;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.control.ColorPicker;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
public class LayerController {
private ColorPicker colorPicker;
private Group root;
private Group canvasGroup;
private Canvas canvas1;
private GraphicsContext gc1;
// Reference to the main application
private MainApp mainApp;
/**
* Is called by the main application to give a reference back to itself.
*
* @param mainApp
*/
public void setMainApp(MainApp mainApp) {
this.mainApp = mainApp;
//get data from main app if necessary
}
public void initialize(){
createLayers();
handleLayers();
createCircles();
}
private void createLayers(){
canvas1 = new Canvas(400, 400);
// Obtain Graphics Context
gc1 = canvas1.getGraphicsContext2D();
initDraw(gc1);
//create root group
Group root = new Group();
canvasGroup = new Group();
canvasGroup.getChildren().add(canvas1);
//add nodes to the root group
VBox vBox = new VBox(); //lays out children in a vertical box
vBox.getChildren().addAll(colorPicker, canvasGroup);
root.getChildren().add(vBox);
Scene scene = new Scene(root, 400, 425);
mainApp.getPrimaryStage().setTitle("Painting Circles");
mainApp.getPrimaryStage().setScene(scene);
mainApp.getPrimaryStage().show();
}
private void initDraw(GraphicsContext gc){
colorPicker = new ColorPicker();
double canvasWidth = gc.getCanvas().getWidth();
double canvasHeight = gc.getCanvas().getHeight();
gc.setFill(Color.LIGHTGRAY);
gc.setStroke(Color.BLACK);
gc.setLineWidth(10);
gc.fill();
gc.strokeRect(
0, //x of the upper left corner
0, //y of the upper left corner
canvasWidth, //width of the rectangle
canvasHeight); //height of the rectangle
gc.setFill(colorPicker.getValue());
gc.setStroke(colorPicker.getValue());
gc.setLineWidth(1);
}
private void handleLayers(){
canvas1.addEventHandler(MouseEvent.MOUSE_PRESSED,
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
gc1.beginPath();
gc1.setLineWidth(20);
gc1.moveTo(event.getX(), event.getY());
gc1.setStroke(colorPicker.getValue());
gc1.strokeRoundRect(event.getX(), event.getY(), 10, 10, 10, 10);
}
});
canvas1.addEventHandler(MouseEvent.MOUSE_DRAGGED,
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
//TODO: Smooth out the mouse_dragged drawing
gc1.lineTo(event.getX(), event.getY());
gc1.setLineWidth(20);
gc1.setStroke(colorPicker.getValue());
gc1.stroke();
}
});
canvas1.addEventHandler(MouseEvent.MOUSE_RELEASED,
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
}
});
}
private void createCircles(){
Circle c = new Circle();
c.setCenterX(100.0f);
c.setCenterY(100.0f);
c.setRadius(25);
c.setStrokeWidth(5);
c.setStroke(Color.BLUE);
c.setFill(Color.TRANSPARENT);
canvasGroup.getChildren().add(c);
/*This is my attempt at creating a mouse event that will trigger when
*the user drags the mouse near the circle with the idea that it will
*eventually color the circle. This didn't work...
*/
c.addEventHandler(MouseEvent.ANY, new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
gc1.setLineWidth(20);
gc1.setStroke(Color.GREEN);
gc1.strokeRoundRect(event.getX(), event.getY(), 10, 10, 10, 10);
}
});
}
}
我想我想明白了...我需要在调用“startFullDrag()”之后捕获“mouse_drag_over”事件。
canvas1.addEventHandler(MouseEvent.DRAG_DETECTED,
new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
canvas1.startFullDrag();
}
});
c.addEventHandler(MouseDragEvent.MOUSE_DRAG_OVER, new EventHandler<MouseDragEvent>(){
@Override
public void handle(MouseDragEvent event) {
c.setFill(colorPicker.getValue());
}
});
因此,我有一个#container div的简单设置,其中包含一个#field div。我还有一个不可见的#悬停范围,它跟随鼠标移动(居中)并在#field上悬停时可见。 HTML: JS公司: 当我在场地上悬停时,只要我移动鼠标,它就会触发无数的mouseenter和mouseleave(预期的mousemove)事件。这似乎是因为#悬停范围以鼠标为中心,每次移动鼠标时,我都会离开#字段并输入#
目标 学习在OpenCV中处理鼠标事件 你将学习这些函数:cv2.setMouseCallback() 简单的演示 在这里,我们创建一个简单的应用程序,无论我们在哪里双击它,都会在图像上绘制一个圆圈。 首先我们创建一个鼠标事件发生时执行的回调函数。鼠标事件可以是任何与鼠标有关的东西,例如左键,左键,左键双击等。它给我们每个鼠标事件的坐标(x,y)。有了这个活动和地点,我们可以做任何我们喜欢的事情。
我准备好为此拔掉头发了。我正在开发游戏图形用户界面,它有一个由网格单元组成的地图。 单元格网格由StackPane组成,然后由ImageView或Shapes等组成的几个层组成。 整个内容包含在GridPane中,GridPane包含BorderPane的中心元素; 我不能在底层场景中添加鼠标事件,因为所有节点都会得到它- 下面是创建堆栈的代码: 这是设置EventHandler的代码- 谢谢你的
我要在两个图像视图之间绘制路径,视图与图片相同 此路径从其中一个imageview开始(按鼠标),继续(按鼠标)并在窗格上移动事件,并且必须在另一个imageview结束(按鼠标)。这是第一次鼠标按下在imageviews上没有收到任何鼠标按下事件后的问题,该事件只是在窗格上收到,因为绘制线没有停止。我的代码出了什么问题? 这是我的控制器代码: 请帮帮我。
我有一个定义如下的WPF TreeView控件: 我使用以下代码跟踪哪些节点已经展开或折叠: 与以下代码的工作方式不同: 在第一种情况下,根本不执行,因为命令。我认为事件处理程序的执行顺序不应该很重要?
我在做拖放。我正在将一些按钮从一个VBox拖动到另一个VBbox。我现在看到的是,只有当鼠标光标进入目标的边界时,才会触发OnDragEnter事件。 我的问题是:当源按钮边框与目标列表边框重叠时,如何触发拖动事件(或其他事件)? 非常感谢你