2017-02-07 2 views
0
  1. Работа с приложением таймера, которое выводится на консоль во время работы приложения.
  2. Я хочу все такую ​​же информацию для печати в текстовой области приложения.
  3. Он будет печатать текущую активность только в текстовой области, но не будет печатать все.
  4. Пытался использовать ListView вместо TextArea, но не смог понять, как его перевести в приложение. Есть ли более простой способ сделать это?
  5. Изображение показывает: стрелка 2 «loggedMessages» = это только сохраняет последнее действие. стрелка 3 - это консоль со всеми зарегистрированными действиями. Я хочу, чтобы область loggedMessage отображала все действия, которые захватывает консоль.

Вот код:JavaFX TextArea для интеграции с ListView

Image of Timer app fields

public class Controller { 

@FXML private AnchorPane container; 
@FXML private Label title; 
@FXML private TextArea inputMessage; 
@FXML private TextArea loggedMessages; 


private Timeline mTimeline; 
private TimerAttempt mCurrentAttempt; 
private StringProperty mTimerText; 



public Controller(){ 
    mTimerText = new SimpleStringProperty(); 
    setTimerText(0); 
} 


public String getTimerText() { 
    return mTimerText.get(); 
} 

public StringProperty timerTextProperty() { 
    return mTimerText; 
} 

public void setTimerText(String timerText) { 
    this.mTimerText.set(timerText); 
} 
public void setTimerText(int remainingSeconds){ 
    int minutes = remainingSeconds/60; 
    int seconds = remainingSeconds % 60; 
    setTimerText(String.format("%02d:%02d", minutes, seconds)); 
} 


private void prepAttempt(AttemptKind kind){ 
    reset(); 
     mCurrentAttempt = new TimerAttempt(kind, ""); 
     addAttemptStyle(kind); 

     title.setText(kind.getTheDisplayName()); 
     setTimerText(mCurrentAttempt.getRemainingSeconds()); 

     mTimeline = new Timeline(); 
     mTimeline.setCycleCount(kind.getAmountOfSeconds()); 
     mTimeline.getKeyFrames().add(new KeyFrame(Duration.seconds(1), e ->{ 
       mCurrentAttempt.tickDown(); 
       setTimerText(mCurrentAttempt.getRemainingSeconds()); 
     })); 

    mTimeline. setOnFinished(e -> { 
     saveCurrentAttempt(); 
     mApplause.play(); 
     prepAttempt(mCurrentAttempt.getTypeOfAttempt() == AttemptKind.STUDYING ? 
               AttemptKind.BREAK : AttemptKind.STUDYING); 
    }); 
} 

private void saveCurrentAttempt() { 
    mCurrentAttempt.setMessage(inputMessage.getText()); 
    mCurrentAttempt.save(); 
    loggedMessages.setText(String.valueOf(mCurrentAttempt)); 
    inputMessage.clear(); 
} 


private void reset() { 
    clearAttemptStyles(); 
    if (mTimeline != null && mTimeline.getStatus() == Animation.Status.RUNNING) { 
     mTimeline.stop(); 
} 
} 

private void addAttemptStyle(AttemptKind kind) { 
    container.getStyleClass().add(kind.toString().toLowerCase()); 

} 
private void clearAttemptStyles(){ 
    container.getStyleClass().remove("playing"); 
    for (AttemptKind kind : AttemptKind.values()){ 
     container.getStyleClass().remove(kind.toString().toLowerCase()); 

    } 

} 

// ----------------------- Таймер класса -------------------

public class TimerAttempt { 
    private String mMessage; 
    private int mRemainingSeconds; 
    private AttemptKind mTypeOfAttempt; 


    public TimerAttempt(AttemptKind kind, String inputMessage) { 
     mTypeOfAttempt = kind; 
     mMessage = inputMessage; 
     mRemainingSeconds = kind.getAmountOfSeconds(); 

    } 

    public AttemptKind getTypeOfAttempt() { 
     return mTypeOfAttempt; 
    } 

    public String getMessage() { 
     return mMessage; 
    } 

    public int getRemainingSeconds() { 
     return mRemainingSeconds; 
    } 

    public void setMessage(String message) { 
     mMessage = message; 
    } 

    public void tickDown() { 
     mRemainingSeconds --; 
    } 

    public void save() { 

     System.out.printf("LOGGED: %s %n ", this); 
    } 


     @Override 
    public String toString() { 
     Date date = new Date(); 
     SimpleDateFormat timeStamp = new SimpleDateFormat("MM/dd/yyyy h:mm;ss a"); 
     String formattedDate = timeStamp.format(date); 

     return formattedDate + 
       "\n Working on: " + mMessage + 
       "\n During : " + mTypeOfAttempt + '\n'; 
    } 
} 

ответ

0

Заменить

loggedMessages.setText(String.valueOf(mCurrentAttempt)); 

с

loggedMessages.appendText(String.valueOf(mCurrentAttempt)); 

TextArea метод appendText(...) добавляет текст в текстовой области. Метод TextAreasetText(...) устанавливает текст текстовой области.

+0

Это делает именно то, что мне нужно. Спасибо за простое объяснение. – Brown

Смежные вопросы