Я пытаюсь реализовать GUI в каком-то двусвязном списке - PullRequest
0 голосов
/ 09 декабря 2018

Я до сих пор делал это, он добавляет labels на stage, но удаление вещи работает, но не так, как предполагалось ... Как я могу хранить данные labels в array или что-то подобноеЯ могу сравнить remove.getText(); с этим и удалить это введенное значение, если предыдущее добавлено как label на stage.

public class Main extends Application {
    Group root;
    Label label1,label;
    int count=1,count1=1;
public static void main(String[] args) {launch(args);}
public void start(Stage stage) throws Exception {
    stage.setTitle("LinkedList GUI");
    stage.setResizable(false);
    root = new Group();
    LinkedList<Integer> Linked =new LinkedList<Integer>();
    Button Addfirst = new Button("AddFirst");
    Addfirst.setTranslateX(40);
    Addfirst.setTranslateY(350);
    TextField first=new TextField();
    first.setPrefWidth(60);
    first.setTranslateX(120);
    first.setTranslateY(350);
    Addfirst.setOnAction(new EventHandler<ActionEvent>() {
        @Override public void handle(ActionEvent e) {
           int a = Integer.parseInt(first.getText());
           Linked.addFirst(a);
            label1=new Label(" "+first.getText());
                    label1.setFont(Font.font("Buxton Sketch",FontWeight.BOLD,FontPosture.ITALIC,12));
                    label1.setPrefWidth(25);
                    label1.setPrefHeight(25);
                    label1.setTranslateY(60);
                    label1.setTextFill(Color.GREEN );
                    label1.setStyle("-fx-border-color: Blue;");
           root.getChildren().addAll(label1);
            label1.setTranslateX(250-(20*count++));
            count++;
        }
      });
    Button Addlast = new Button("AddLast");
    Addlast.setTranslateX(200);
    Addlast.setTranslateY(350);
    TextField last=new TextField();
    last.setPrefWidth(60);
    last.setTranslateX(270);
    last.setTranslateY(350);
    Addlast.setOnAction(new EventHandler<ActionEvent>() {
        @Override public void handle(ActionEvent e) {
            int  b= Integer.parseInt(last.getText());
            Linked.addLast(b);
            label=new Label(" "+last.getText());
            label.setFont(Font.font("Buxton Sketch",FontWeight.BOLD,FontPosture.ITALIC,12));
            label.setPrefWidth(25);
            label.setPrefHeight(25);
            label.setTranslateY(60);
            label.setTextFill(Color.GREEN );
            label.setStyle("-fx-border-color: Blue;");
            root.getChildren().add(label);
            label.setTranslateX(250+(20*count1++));
            count1++;
        }
    });
    Button delete = new Button("Delete");
    delete.setTranslateX(350);
    delete.setTranslateY(350);
    TextField remove=new TextField();
    remove.setPrefWidth(60);
    remove.setTranslateX(420);
    remove.setTranslateY(350);
    delete.setOnAction(new EventHandler<ActionEvent>() {
        @Override public void handle(ActionEvent e) {
            if(remove.getText().equals(first.getText())) {
                Linked.remove(first.getText());
                root.getChildren().remove(label1);
            }
            else if(remove.getText().equals(last.getText())) {
                Linked.remove(last.getText());
                root.getChildren().remove(label);
          }
            else {
                Alert alert = new Alert(AlertType.ERROR);
                alert.setTitle("Error");
                alert.setContentText("Not in List");
                alert.showAndWait();
            }
        }
    });
    Text text =new Text("Doubly LinkedList GUI");
    text.setStyle("-fx-border-color: Blak;");
    text.setFont(Font.font("Buxton Sketch",FontWeight.BOLD,FontPosture.ITALIC,16));
    text.setTranslateX(150);
    text.setTranslateY(30);
    root.getChildren().addAll(text,Addfirst,first,Addlast,last,delete,remove);
    Scene scene = new Scene(root,500,400);
    stage.setScene(scene);
    stage.show();
    }
}

1 Ответ

0 голосов
/ 09 декабря 2018

Я рекомендую использовать макет, который позиционирует детей вместо вас, а не размещать их самостоятельно.Например, использование HBox в качестве родительского для меток позволяет вам просто добавить / удалить дочерний элемент с тем же индексом, что и добавленный / удаленный в списке:

@Override
public void start(Stage stage) throws Exception {
    HBox container = new HBox(20);
    container.setPrefHeight(40);
    Button addFirst = new Button("add head");
    Button addLast = new Button("add tail");
    Button remove = new Button("remove");
    TextField textField = new TextField();
    HBox buttonContainer = new HBox(10, textField, addFirst, addLast, remove);

    final LinkedList<Integer> list = new LinkedList<>();

    addFirst.setOnAction(evt -> {
        String text = textField.getText();
        Integer value = Integer.parseInt(text);
        list.addFirst(value);
        container.getChildren().add(0, new Label(text));
    });

    addLast.setOnAction(evt -> {
        String text = textField.getText();
        Integer value = Integer.parseInt(text);
        list.addLast(value);
        container.getChildren().add(new Label(text));
    });

    remove.setOnAction(evt -> {
        String text = textField.getText();
        int value = Integer.parseInt(text);
        ListIterator<Integer> iterator = list.listIterator();
        while (iterator.hasNext()) {
            Integer element = iterator.next();
            if (element == value) {
                container.getChildren().remove(iterator.nextIndex() - 1);
                iterator.remove();
                break;
            }
        }
    });

    VBox root = new VBox(container, buttonContainer);
    Scene scene = new Scene(root, 500, 400);
    stage.setScene(scene);
    stage.show();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...