Javafx: Как напечатать строку массива в метке, используя кнопку и текстовое поле? - PullRequest
0 голосов
/ 24 января 2020

Я использую IntelliJIdea. Я хочу отобразить все числа, которые я отправил в Textfield. Поэтому я создал ArrayList для размещения всех чисел, которые я там представил. Однако каждый раз, когда я нажимаю кнопку, он не добавляет весь список, а только 1 номер, который я отправил. Как я могу показать все числа, которые я отправил в текстовое поле и отображать его с помощью метки. Я использую отдельный f xml.

введите описание изображения здесь

sample.f xml:

<?import javafx.geometry.Insets?>
<?import javafx.scene.layout.GridPane?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.control.ScrollPane?>
<?import javafx.scene.layout.VBox?>
<GridPane fx:controller="com.binarySearch.Controller"
          xmlns:fx="http://javafx.com/fxml" alignment="TOP_LEFT" hgap="10" vgap="10">

    <Label text="Please enter number" GridPane.rowIndex="0" GridPane.columnIndex="0"/>
    <TextField  fx:id="inputNumber" GridPane.rowIndex="1" GridPane.columnIndex="0" />
    <Button text="Submit" fx:id="submit" GridPane.rowIndex="2" GridPane.columnIndex="0" onAction="#handleSubmitPress"/>
    <Button text="Search" fx:id="search" GridPane.rowIndex="3" GridPane.columnIndex="0" onAction="#handleSearchPress" />
    <Label text="You input: " GridPane.rowIndex="4" GridPane.columnIndex="0" />
    <VBox GridPane.rowIndex="5" GridPane.columnIndex="0" >
        <Label fx:id="display" />
    </VBox>

</GridPane>

Контроллер. java

package com.binarySearch;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;

import java.util.ArrayList;
import java.util.List;

public class Controller {
    @FXML
    private TextField inputNumber;

    @FXML
    private Button submit;

    @FXML
    private Button search;

    @FXML
    private Label display;

    public void handleSubmitPress() {
        List<Integer> list = new ArrayList<>();
        int num = Integer.parseInt(inputNumber.getText());
        list.add(num);

        for(int x=0; x<list.size();x++) {
            display.setText(list.get(x).toString());
        }
    }

}

1 Ответ

2 голосов
/ 24 января 2020

Вы создаете новый список в самом методе. Этот список изначально пуст, поэтому после добавления текста он содержит один элемент. Кроме того, использование setText заменяет текст метки. Он не назначает комбинацию строк, переданных как текст; он также не добавляет больше Label s.

Первую проблему можно исправить, объявив список в виде поля, но вторую проблему, вероятно, лучше всего решить, просто добавив новый Label в VBox, что может сделать ненужным отслеживание данных в списке:

private final List<Integer> list = new ArrayList<>();
@FXML
private VBox vbox;

public void handleSubmitPress() {
    int num = Integer.parseInt(inputNumber.getText());
    list.add(num);

    vbox.getChildren().add(new Label(Integer.toString(num)));
}
    <VBox GridPane.rowIndex="5" GridPane.columnIndex="0" fx:id="vbox" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...