Как создать список Node и передать его в другой класс? JavaFX

249
19 октября 2017, 08:51

Задача такова: нужно нарисовать 2 линии на Pane: Есть класс Locomotive в котором рисуются линии:

@Override
public void drawLocomotive() {
     drawBaseLocomotive();
}
protected Node drawBaseLocomotive() {
     Line line = new Line(30,40,50,60);
     Line line2 = new Line(50,60,70,80);
     return line;
}

И класс Controller(контроллер XML) в котором есть полотно drawPanel:

public class Controller implements Initializable{
    @FXML
    Pane drawPanel;
    public void btnSetBaseLocomotive_Click(ActionEvent actionEvent) {   
        Locomotive locomotive = new Locomotive();
        inter = new Locomotive(maxSpeed, maxCountPass, weight, color);
        drawPanel.getChildren().addAll(locomotive.drawBaseLocomotive());
    }
}

Как реализовать список,который будет содержать две линии,и затем передать его в

drawPanel.getChildren().addAll(locomotive.drawBaseLocomotive()); 

Сейчас он рисует одну линию вот так:

Answer 1

Вариантов несколько:

1) Заврапить в другой Node

protected Node drawBaseLocomotive() {
     Line line = new Line(30,40,50,60);
     Line line2 = new Line(50,60,70,80);
     /* нужно проверять, могут быть смещения*/
     return new Group( line, line2 );
//   return new AnchorPane( line, line2 );
//   return new Pane( line, line2 );
}

2) Передать массив или список

protected Node[] drawBaseLocomotive() {
     Line line = new Line(30,40,50,60);
     Line line2 = new Line(50,60,70,80);
     return new Node[]{ line, line2 };
}
drawPanel.getChildren().addAll(Arrays.asList(locomotive.drawBaseLocomotive()));
protected List<Nide> drawBaseLocomotive() {
     Line line = new Line(30,40,50,60);
     Line line2 = new Line(50,60,70,80);
     List<Node> list = new ArrayList<>(2);
     list.addAll( line, line2 );
     return list;
}
drawPanel.getChildren().addAll(locomotive.drawBaseLocomotive());

3) Создать класс-кортеж

private class Tuple {
    public final Line line, line2;
    public Tuple( Line line, Line line2 ) {
        this.line = line;
        this.line2 = line2;
    }
}
protected Tuple drawBaseLocomotive() {
     Line line = new Line(30,40,50,60);
     Line line2 = new Line(50,60,70,80);
     return new Tuple( line, line2 );
}
Tuple tuple = locomotive.drawBaseLocomotive();
drawPanel.getChildren().addAll(tuple.line,tuple.line2);
READ ALSO
Написать движок игры на java [требует правки]

Написать движок игры на java [требует правки]

Допустим захотел я написать движок для игр, зная только JavaКак это возможно реализовать?

181
Почему выполняется со второго клика и как исправить?

Почему выполняется со второго клика и как исправить?

Есть поле address(TextView)Нужно вывести данные по выполнению запроса

317