Почему нет изменений по клику на Label?

 
 
 
Сообщения:11
Делаю визуализацию графов.
public class Controller {

    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private Pane pane;

    @FXML
    private Label vertex2;

   @FXML
    void say(MouseEvent e) {

       count++;
       int EX, EY;
       EX = (int)e.getSceneX();
       EY = (int)e.getSceneY();
       xs.add(EX);
       ys.add(EY);
       System.out.println(xs);
       System.out.println(ys);

       draw_Vertex(EX, EY);
    }

    @FXML
    void draw_Line(MouseEvent e) {
 
        vertex2.setStyle("-fx-border-color: c90000;");

    }


    void draw_Vertex(int EX, int EY){
        vertex2 = new Label(Integer.toString(count));
        vertex2.setAlignment(CENTER);
        vertex2.setContentDisplay(ContentDisplay.CENTER);
        vertex2.setPrefSize(90, 90);
        vertex2.setStyle("-fx-border-color: c90000; -fx-border-radius: 99;");
        vertex2.setCursor(Cursor.HAND);
        vertex2.setTranslateX(EX-45);
        vertex2.setTranslateY(EY-45);
        pane.getChildren().add(vertex2);
    }

    @FXML
    void initialize() {
  
    }
    ArrayList<Integer> xs = new ArrayList<>();
    ArrayList<Integer> ys = new ArrayList<>();
    int count = 0;

}


<AnchorPane fx:id="field" cacheShape="false" centerShape="false" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="900.0" prefWidth="1300.0" scaleShape="false" style="-fx-background-color: #b2b2b2;" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <children>
      <ChoiceBox layoutX="890.0" layoutY="766.0" prefHeight="42.0" prefWidth="183.0" />
      <Label fx:id="Lab" layoutX="1122.0" layoutY="30.0" prefHeight="35.0" prefWidth="118.0" text="Welcome">
         <font>
            <Font size="27.0" />
         </font>
      </Label>
      <Pane fx:id="pane" onMouseClicked="#say" prefHeight="742.0" prefWidth="1095.0" style="-fx-background-color: fafafa;">
         <children>
            <Label fx:id="vertex2" onMouseClicked="#draw_Line" />
            <Label fx:id="vertex" alignment="CENTER" contentDisplay="TOP" disable="true" layoutX="159.0" layoutY="234.0" prefHeight="102.0" prefWidth="102.0" style="-fx-border-color: c90000; -fx-border-radius: 99;" text="1" textOverrun="CLIP" visible="false">
               <font>
                  <Font name="Bookshelf Symbol 7" size="37.0" />
               </font>
               <cursor>
                  <Cursor fx:constant="HAND" />
               </cursor>
            </Label>
         </children>
      </Pane>
   </children>
</AnchorPane>


По клику на Pane добавляется вершина, а по клику на добавленную вершину (он же label), снова добавляется вершина так, будто я на панель нажимаю. Метод draw_Line будет еще дописан, чтобы вершины соединялись, а пока просто чтобы цвет менял хотя бы нужно
 
 
Сообщения:28
Попробуйте так: В коде, там где обрабатываете клик по панели и создаете Label, там же добавьте к Label ваш обработчик и должно все заработать. Только нужно будет в обработчике поглотить событие методом consume(), что бы оно не прошло дальше к Pane и не создало еще один Label.

что то типа этого
vertex2.setOnMouseClicked( e -> {
    e.consume();
    vertex2.setStyle("-fx-border-color: #AAAAAA;");
})


Проверял у меня все отрабатывается нормально.
Изменен:19 ноя 2019 21:02
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет