当我将我的窗格设置为每次按下鼠标时都有一个向窗格添加形状的属性时,我倾向于遇到#isHover()方法反应方式的问题。
我不想在窗格中预先存在的形状上添加形状,因此我会浏览窗格中的每个形状,以确保鼠标放置在形状上:
@Override
public void initialize(URL location, ResourceBundle resources) {
nfaNodes = new LinkedList<>();
nfaPane.setOnMousePressed(event -> {
NFANode nfaNode;
if (event.getButton().equals(MouseButton.PRIMARY)) {
for (final NFANode node : nfaNodes)
if (node.isHover())
return;
nfaNode = new NFANode("Q_" + nfaNodes.size(), event.getX(), event.getY());
nfaPane.getChildren().add(nfaNode);
nfaNodes.add(nfaNode);
}
});
}
然而,即使我远离其他节点,这也不会放置节点。
我的NFA课程结构如下:
public class NFANode extends Pane {
//private List<NFANode> next;
public static final Font nfaFont = Font.font("Footlight MT Light", 25);
private final Ellipse bubble;
private final Text text;
public NFANode(String text, double x, double y) {
final String[] subscript = text.split("_", 0);
if (subscript.length > 1) {
final StringBuilder builder = new StringBuilder();
for (char c : subscript[1].toCharArray()) builder.append(Character.isDigit(c) ? (char) (c + 8272) : c);
text = subscript[0] + builder.toString();
}
this.text = new Text(x, y + 5, text);
this.text.setFont(nfaFont);
final double textWidth = this.text.getBoundsInLocal().getWidth();
bubble = new Ellipse(x, y, this.text.getBoundsInLocal().getWidth() + 5, 25);
this.text.setX(x - textWidth / 2);
bubble.setStroke(Color.BLACK);
bubble.setFill(Color.WHITE);
getChildren().addAll(bubble, this.text);
}
public Text getText() {
return text;
}
public Ellipse getBubble() {
return bubble;
}
}
以下是行动中的问题。每次我将鼠标移动到新位置时,我都会点击,尝试放置一个节点。
我很困惑为什么会这样。这是#isHover()的问题吗?