Может ли кто-нибудь объяснить мне, почему это странное поведение существует? Когда у меня есть группа в vbox, каждый элемент в дочернем элементе, похоже, изменяет братьев и сестер.Странное поведение при наличии группы в vbox
После странного поведения происходит:
все нормальные здесь
здесь тоже все нормально
кричит, почему движок поиска?
Прежде структуры приложения у меня есть:
root (VBox) //vbox so the menubar has its own space
├───menubar (MenuBar)
└───contentroot (Group)
├───searchbar (TextField) //searchbar should always be on the top left
└───nodeRoot (Group)
├───circle1 (Nodes)
└───circle2 (Nodes)
Корня является VBox так MenuBar имеет свое бесспорное пространство. Строка поиска всегда должна быть сверху слева, непосредственно под меню. Узел node должен содержать все остальные узлы. Своего рода рисунок, который я должен был бы перетащить.
Код:
public void start(Stage primaryStage) throws Exception{
VBox root = new VBox();
MenuBar menuBar = new MenuBar(new Menu("File"));
Group contentRoot = new Group();
contentRoot.getChildren().add(new TextField("SearchBar"));
Group nodeRoot = new Group();
contentRoot.getChildren().add(nodeRoot);
root.getChildren().addAll(menuBar, contentRoot);
Circle circle = new Circle(30, Color.RED);
nodeRoot.getChildren().add(circle);
Scene scene = new Scene(root, 300, 275);
primaryStage.setScene(scene);
primaryStage.show();
scene.setOnMousePressed(event -> {
circle.setTranslateX(event.getSceneX() - 15);
circle.setTranslateY(event.getSceneY() - 15);
});
}
Моя догадка, почему это происходит: Проблема начали появляться после того, как я добавил строку меню и поместить все в VBox. Это происходит, когда братья и сестры nodeRoot тоже меняются. Я предполагаю, что, поскольку VBox является регионом, поведение отличается от обычной группы, которая расширяется. Но тогда я не понимаю, почему это происходит, только если элемент перемещается влево или вверх.
Может кто-нибудь объяснить, почему это происходит и как я могу это исправить?
Проблема с nodeRoot заключается в том, что я также сделал ее подвижной, поэтому у меня есть «бесконечное» пространство для размещения моих узлов. При использовании панели вместо группы для nodeRoot узлы имеют тенденцию зажиматься при перемещении из панели. Вот почему я использую группу. Или вы знаете какое-либо другое решение? – kadir
Если вы хотите, чтобы он не зажимался, когда он двигался влево, то, я думаю, вопрос в том, как еще вы ожидаете, что он будет себя вести? Если круг имеет отрицательные координаты и вы хотите, чтобы он оставался видимым, то, конечно, текстовое поле должно перемещаться вправо, чтобы его можно было разместить. –
Возможно, я был недостаточно ясен. Вырезание предназначалось не для окна, а при перемещении nodeRoot (в данном случае группа, по вашему предложению, панель). Это связано с тем, что панель не бесконечно большая и имеет некоторые границы. Если я, например, перемещаю панель 300px вправо, узлы в клипе панели не на границах окна, а на левой стороне панели, которая теперь составляет 300 пикселей. – kadir