我在舞台上有一组节点,圆。我希望能够单击其中的一个并“选择它”(只是获得对它的引用,以便我可以四处移动,更改颜色等)
Pane root = new Pane();
root.getChildren().addAll( /* an array of Circle objects */ );
Scene scene = new Scene(root, 500, 500, BACKGROUND_COLOR);
scene.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
// how do I get which Circle I clicked on?
}
});
stage.setTitle(TITLE);
stage.setScene(scene);
stage.show();
我只需要向每个圈子本身注册一个侦听器。然后,您已经具有注册侦听器的圈子的参考。
该示例在可用性方面有所提高,因为它一次显示了10,000个圆圈,但它演示了该技术:
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.css.PseudoClass;
import javafx.geometry.Point2D;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.stage.Stage;
public class GridOfCircles extends Application {
private static final PseudoClass SELECTED_P_C = PseudoClass.getPseudoClass("selected");
private final int numColumns = 100 ;
private final int numRows = 100 ;
private final double radius = 4 ;
private final double spacing = 2 ;
private final ObjectProperty<Circle> selectedCircle = new SimpleObjectProperty<>();
private final ObjectProperty<Point2D> selectedLocation = new SimpleObjectProperty<>();
@Override
public void start(Stage primaryStage) {
selectedCircle.addListener((obs, oldSelection, newSelection) -> {
if (oldSelection != null) {
oldSelection.pseudoClassStateChanged(SELECTED_P_C, false);
}
if (newSelection != null) {
newSelection.pseudoClassStateChanged(SELECTED_P_C, true);
}
});
Pane grid = new Pane();
for (int x = 0 ; x < numColumns; x++) {
double gridX = x*(spacing + radius + radius) + spacing ;
grid.getChildren().add(new Line(gridX, 0, gridX, numRows*(spacing + radius + radius)));
}
for (int y = 0; y < numRows ; y++) {
double gridY = y*(spacing + radius + radius) + spacing ;
grid.getChildren().add(new Line(0, gridY, numColumns*(spacing + radius + radius), gridY));
}
for (int x = 0 ; x < numColumns; x++) {
for (int y = 0 ;y < numRows ; y++) {
grid.getChildren().add(createCircle(x, y));
}
}
Label label = new Label();
label.textProperty().bind(Bindings.createStringBinding(() -> {
Point2D loc = selectedLocation.get();
if (loc == null) {
return "" ;
}
return String.format("Location: [%.0f, %.0f]", loc.getX(), loc.getY());
}, selectedLocation));
BorderPane root = new BorderPane(new ScrollPane(grid));
root.setTop(label);
Scene scene = new Scene(root);
scene.getStylesheets().add("grid.css");
primaryStage.setScene(scene);
primaryStage.show();
}
private Circle createCircle(int x, int y) {
Circle circle = new Circle();
circle.getStyleClass().add("intersection");
circle.setCenterX(x * (spacing + radius + radius) + spacing);
circle.setCenterY(y * (spacing + radius + radius) + spacing);
circle.setRadius(radius);
circle.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> {
selectedCircle.set(circle);
selectedLocation.set(new Point2D(x, y));
});
return circle ;
}
public static void main(String[] args) {
launch(args);
}
}
与文件grid.css:
.intersection {
-fx-fill: blue ;
}
.intersection:selected {
-fx-fill: gold ;
}
我试图在JavaFX中执行以下操作。我正在用画布在屏幕上画东西,我希望发生以下事情: 当我点击画布表面时(比如快速按下并释放):有些事情发生了 当我在画布表面拖动时(如按住并移动,然后释放):会发生其他事情 但是如果我拖动,我希望它排除单击操作,所以如果我拖动,如果我单击,会发生什么事情,而不应该发生。不幸的是,当我释放鼠标时,释放和单击事件都会启动,即使我拖动鼠标。
我正在尝试在javafx的表格视图中实现一列中的两个按钮。我能够在一列中实现一个按钮,但无法在一列中添加两个按钮。我从这个链接中得到了一些想法 如何在JavaFX表视图中添加按钮 在TableView(JAVAFX)中的单元格中添加按钮 如何在TableView JavaFX的表列中添加两个按钮 我在上面的链接中使用了这个想法。然而,代码对我不起作用。 在中,不会显示“操作”列按钮。我哪里做错了。
我正在使用一个jQuery插件:bootstrap-select.js我的超文本标记语言是选择(多个)- 示例:用户选择项4=控制台。记录项目4。然后,用户还选择项目2=控制台。记录项目2。目前我得到了第4项,第2项。。。它们总是在一个数组中,而不是单个的。 我的最终目标是根据用户选择的内容在页面上显示和隐藏div。将有多个选择选项字段。 HTML代码: JS代码: 当前输出: 插件站点:引导选择
嗨,我有一系列使用mapquest和传单的圆圈 圆数据是从查询联系的sql表中动态生成的:圆名、长/长中心位置和半径。 我希望用户能够点击任一个圆和点击事件加载编辑圆页面,然后加载另一个地图页面,该页面只显示被点击编辑的单个圆,而不是圆的集合。 加载特定的圆圈编辑页面等都是排序的,我需要理解的是所需的语法,这样我就可以单击圆圈并加载页面editcircle.html?circleid=4
我创建了一个显示图像的JavaFX项目。我在JavaFX中使用画布绘制此图像并将其显示在锚窗格上。我在图像顶部放了一个网格,基本上我需要做的是当用户单击网格中的特定框时,找出单击的位置,以便我可以将坐标存储在文本文件中。 我曾考虑在每个框中放置一个按钮,但这需要一段时间,是否有一种更简单的方法可以使用gridpane实现这一点?如何获得该点击的位置/坐标? 谢谢你!