JavaFX,文本不会在TextArea中显示

时间:2015-04-04 15:51:23

标签: javafx linked-list textarea javafx-8

我完成了大部分程序,唯一的问题是让数字显示在TextArea中。编写一个程序,让用户从图形用户界面输入数字并将其显示在文本区域中。使用LinkedList存储数字。不要重复数字。添加sort,shuffle,reverse以对列表进行排序。

package storedInLinkedList;

import java.util.Collections;
import java.util.LinkedList;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.geometry.Orientation;
import javafx.geometry.Pos;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.control.ScrollPane;

public class StoredInLinkedList extends Application{

    TextField txt = new TextField();
    TextArea tArea = new TextArea();
    Label message = new Label("Enter a Number: ");
    Button sort = new Button("Sort");
    Button shuffle = new Button("Shuffle");
    Button reverse = new Button("Reverse");
    private LinkedList<Integer> list = new LinkedList<>();

    @Override
    public void start(Stage primaryStage){
        BorderPane bPane = new BorderPane();


        txt.setAlignment(Pos.TOP_RIGHT);
        bPane.setCenter(txt);
        bPane.setBottom(tArea);

        HBox hBox = new HBox(message, txt);
            bPane.setTop(hBox);

        HBox buttons = new HBox(10);
            buttons.getChildren().addAll(sort, shuffle, reverse);
        bPane.setBottom(buttons);
            buttons.setAlignment(Pos.CENTER);
        VBox vBox = new VBox();
            vBox.getChildren().addAll(hBox, tArea, buttons);

        bPane.setCenter(new ScrollPane(tArea));

        Scene scene = new Scene(vBox, 300,250);
        primaryStage.setTitle("20.2_DSemmes");
        primaryStage.setScene(scene);
        primaryStage.show();

        txt.setOnAction(e -> {
            if(! list.contains(new Integer(txt.getText()))){
                tArea.appendText(txt.getText() + " ");
                list.add(new Integer(txt.getText()));
            }//end if
        });//end action

        sort.setOnAction(e -> {
            Collections.sort(list);
            display();
        });//end action

        shuffle.setOnAction(e -> {
            Collections.shuffle(list);
            display();
        });//end action

        reverse.setOnAction(e -> {
            Collections.reverse(list);
            display();
        });//end action

    }//end stage 

    private void display() {

        for (Integer i: list){
            tArea.setText(null);
            tArea.appendText(i + " ");
        }//end for 
    }//end display

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        launch(args);
    }//end main

}//end class 

1 个答案:

答案 0 :(得分:0)

将textarea清除代码放在for循环之外。否则,您正在清除之前附加的文本,因此textarea只有list的最后一个元素:

private void display() {
    tArea.setText("");  // clear text area
    for (Integer i: list){
        tArea.appendText(i + " ");
    }//end for 
}/