有没有办法允许用户在JavaFX和/或画布中绘制可单独选择的,可移动的和可重新调整大小的形状,而我没有考虑或意识到这些形状?
我是JavaFX的新手(实际上是Java GUI),我正在尝试设计一种允许用户在窗格/工作区/页面上绘制(单击并拖动)最多100个矩形的方法。我也在寻找一种方法来实现这种可扩展性,但现在保持静态比例会很好。我在搜索中没有找到大量类似的例子,其中大多数只探索其中一个选项,但遗漏了我需要完成的某些事情。通常它们显示预定义的节点或画布形状,这些节点或画布形状不可单独使用。所以我试图找到实现这一目标的最佳方法。
绘制形状不是问题,我知道如何做到这一点。它使它们成为工作区内的单个对象(可选择,可移动,可调整大小)。
我目前的想法是创建一个Javafx窗格,然后在窗格中创建100个画布作为预定义图层,这些图层与整个工作区的尺寸相同。每个绘制的矩形将占据其中一个图层/画布。选择每个矩形将涉及图层中绘制的矩形内的单击事件,允许用户编辑,(移动,重新调整大小等)
以下Oracle教程是我对这种分层方法的看法。 http://docs.oracle.com/javafx/2/canvas/jfxpub-canvas.htm
我觉得这种方法的工作前提是有缺陷的。一个原因是它需要预定义数量的层。虽然我想要限制它,但它不是很有活力。但大多数情况下,它似乎很复杂。
我对缺乏代码以及问题的概念性质表示歉意,但我一直在搜索和试验(未成功)几周。任何帮助或见解将不胜感激。
谢谢
项目背景 我正在创建一个基本的表单创建者。用户(在创建模式下)将拖动与对应对象相关联的一系列矩形,指示每个矩形的某些属性,坐标和尺寸。将保存并使用此数据(在表单模式下)以放置文本字段以供表单使用。无论在工作区上绘制矩形的哪个位置,相同位置和尺寸的文本字段都将放置在表单上。
答案 0 :(得分:0)
我能想到的最简单的方法是创建一个组,并按需向组添加矩形。然后,您可以将变换和鼠标滑块附加到每个矩形,并使其具有以便在检测到拖动时更新变换的属性。我在这里整理了一个简单的演示。使用右键单击制作矩形,使用鼠标左键拖动以调整大小,使用鼠标中键拖动以移动矩形。
Group root = new Group();
Scene scene = new Scene(root, 1080, 720, true);
scene.addEventFilter(MouseEvent.MOUSE_PRESSED,e->{
if(e.getButton()==MouseButton.SECONDARY)
{
//make a new rectangle
Rectangle rect = new Rectangle(100,100);
root.getChildren().add(rect);
rect.setFill(Color.CYAN);
Scale scaler = new Scale(1,1);
Translate locationCenter = new Translate(e.getX(),e.getY());
rect.getTransforms().add(locationCenter);
rect.getTransforms().add(scaler);
rect.getTransforms().add(new Translate(-50,-50));
//listen for left mouse drags
rect.addEventFilter(MouseEvent.MOUSE_DRAGGED, e2->{
if(e2.getButton()==MouseButton.PRIMARY)
{
//resize with left drag
double scaleX=e2.getSceneX()-rect.localToParent(0,0).getX();
double scaleY=e2.getSceneY()-rect.localToParent(0,0).getY();
scaler.setX(scaleX/100);
scaler.setY(scaleY/100);
} else if(e2.getButton()==MouseButton.MIDDLE)
{
//move with middle drag
locationCenter.setX(e2.getSceneX());
locationCenter.setY(e2.getSceneY());
}
});
}
});