2015-04-04 88 views
0

我已完成大部分程序,唯一的问题是让数字显示在TextArea。编写一个程序,让用户从图形用户界面输入数字并将其显示在文本区域中。使用LinkedList来存储号码。不要重复数字。添加排序,随机播放,反向排序列表。JavaFX,文本将不会显示在TextArea

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 

回答

0

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

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