我在JavaFX中创建了一个小的绘画程序,并且有了一个圆形创建工具。目前,我可以正确地画圆,但与我的其他工具不同,我看不到正在创建的圆(即,当我拖动鼠标时)。只有当我松开鼠标时,我才能看到圆(以正确的尺寸绘制)。我试图在拖动时添加一个< code>strokeOval()方法,但是它创建了一个奇怪的“泪珠”状的圆。我什么都试过了,有人能帮忙吗?
这是我的代码:
public CircleController(Canvas canvas, Scene mainScene, BorderPane borderPane) {
this.borderPane = borderPane;
this.mainScene = mainScene;
this.graphicsContext = canvas.getGraphicsContext2D();
circle = new Circle();
circle.setStrokeWidth(1.0);
circle.setFill(Color.WHITE);
circle.setStroke(Color.BLACK);
mousePressed = event -> {
startingPosX = event.getX();
startingPosY = event.getY();
borderPane.getChildren().add(circle);
};
mouseReleased = event -> {
borderPane.getChildren().remove(circle);
double width = Math.abs(event.getX() - startingPosX);
double height = Math.abs(event.getY() - startingPosY);
graphicsContext.strokeOval(startingPosX, startingPosY, width, height);
graphicsContext.setStroke(Color.BLACK);
removeListeners();
};
mouseDragged = event -> {
circle.setCenterX(event.getX() - startingPosX);
circle.setCenterY(event.getY() - startingPosY);
};
}
上面的代码正确创建了圆,但在我释放鼠标之前无法看到。我将上述事件处理程序应用于我的场景:
@Override
public void handle(ActionEvent event) {
mainScene.setOnMousePressed(mousePressed);
mainScene.setOnMouseDragged(mouseDragged);
mainScene.setOnMouseReleased(mouseReleased);
}
任何人都可以帮忙吗?
你画的是椭圆形而不是圆形。循环
类无法正确处理此问题。您需要椭圆
。此外,请注意,从手势开始向上/向左拖动会导致椭圆的奇怪行为,因为它始终绘制在坐标系的第一象限,原点位于拖动手势的开始处。
以下代码应允许在每个象限绘制椭圆,并使用< code>Ellipse作为“预览”:
// TODO: replace circle field with ellipse field of type Ellipse
ellipse = new Ellipse();
ellipse.setStrokeWidth(1.0);
ellipse.setFill(Color.TRANSPARENT);
ellipse.setStroke(Color.BLACK);
mousePressed = event -> {
startingPosX = event.getX();
startingPosY = event.getY();
ellipse.setCenterX(startingPosX);
ellipse.setCenterY(startingPosY);
ellipse.setRadiusX(0);
ellipse.setRadiusY(0);
borderPane.getChildren().add(ellipse);
};
mouseReleased = event -> {
borderPane.getChildren().remove(ellipse);
double width = Math.abs(event.getX() - startingPosX);
double height = Math.abs(event.getY() - startingPosY);
graphicsContext.setStroke(Color.BLACK);
graphicsContext.strokeOval(Math.min(startingPosX, event.getX()), Math.min(startingPosY, event.getY()), width, height);
removeListeners();
};
mouseDragged = event -> {
ellipse.setCenterX((event.getX() + startingPosX) / 2);
ellipse.setCenterY((event.getY() + startingPosY) / 2);
ellipse.setRadiusX(Math.abs((event.getX() - startingPosX) / 2));
ellipse.setRadiusY(Math.abs((event.getY() - startingPosY) / 2));
};
我有一个程序,其中在窗格中拖动2个圆圈。还有一条线连接它们和上面显示的距离。我的问题是,当我用鼠标以缓慢的速度拖动圆圈时,它们移动得很好,但是当我移动它更快时,圆圈就会停止。 这里是计算圆周阻力的地方
问题内容: 因此,正如标题所述,我想在鼠标拖动时移动椭圆。我先声明了椭圆并将其画出(因为我有8个椭圆,它们带有不同的颜色信息。四个是白色,另一个是红色)。我尝试做我对矩形所做的事情: 但这似乎不起作用。它给我一个错误 我有点困惑,因为我已经阅读了文档,并且Ellipse2D.Double存在这样的变量。 这是一个MCVE: 那么是否有替代算法,或者我只是在语法上缺少什么?我想知道解决方案。谢谢。
我尝试了几乎所有的方法,但是鼠标拖动事件没有触发,就像这里解释的那样: https://openjfx.io/javadoc/11/javafx.graphics/javafx/scene/input/MouseDragEvent.html 下面是一个简单的示例,您可以尝试一下(我在JavaFX11.0.2中使用Java11): 我想通过在或中获取的引用。有许多嵌套窗格等,因为我想保持原来的项目布
问题内容: 我只想在鼠标单击后绘制圆圈。由于paintComponent方法调用了自身,因此首先绘制圆而无需单击。 问题答案: 您的代码存在一些问题: 你永远不会打电话 你只需要一个和 请注意,当您调整框架大小时,某些圆圈将消失,并且总体上以奇怪的方式表现。 我会将所有s 存储在用户单击的位置,然后在方法内部遍历该列表。这样您就可以通话,而圈子不会消失。 更改后的工作代码:
我是JavaFX的新手,我似乎找不到如何做到这一点。 我在Vbox中有一个ListView,我用一个可见的字符串列表填充它。我已经将ListView的SelectionMode设置为MULTIPLE,这允许我在按住Ctrl或Shift键的同时选择多个项目。 我希望能够单击一行并向下拖动鼠标并选择多行,但我不知道该怎么做。我已经尝试了几次搜索,似乎只找到了拖放,这不是我需要的。
我有一组数据,我正在分散地绘制。当我将鼠标滑过其中一个圆圈时,我希望它弹出数据(比如x、y值,可能更多)。以下是我尝试使用的: 我想我需要更多关于输入什么数据的信息?