Эмуляция терминала с помощью GridPane - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь создать встроенное окно терминала в моем проекте. История терминала заполнена сеткой, в которой будет один столбец меток (терминал слушает TextField, и когда пользователь нажимает клавишу ввода, строка добавляется в историю).

Screenshot of the terminal.

public class Terminal extends BorderPane {

    final private GridPane historyPane;
    final private TextField inputField;

    public Terminal() {
        super.setId( "TerminalParent" );
        historyPane = createHistoryPane();
        inputField = createInputField();

        super.setBottom( inputField );
        super.setCenter( historyPane );
    }

    private GridPane createHistoryPane() {
        final GridPane pane = new GridPane();
        pane.setId( "TerminalHistoryPane" );
        return pane;
    }

    private void addHistory( String str ) {
        final Label label = new Label( str );
        label.getStyleClass().add( "TerminalHistoryLabel" );
        historyPane.addRow( historyPane.getRowCount(), label );
    }

    private TextField createInputField() {
        final TextField field = new TextField();
        field.setId( "TerminalTextField" );
        field.setOnKeyPressed( ( event ) -> {
            if( event.getCode() == KeyCode.ENTER ) {
                addHistory( field.getText() );
                field.clear();
            }
        } );
        return field;
    }
}

CSS

* {
    -terminal-text-color: #FB0;
    -terminal-foreground-color: #0FF;
    -terminal-background-color: black;
}

#TerminalParent {
    -fx-background-color: black;
    -fx-pref-width: 400;
}

#TerminalTextField {
    -fx-font-weight: bold;
    -fx-font-family: "FreeMono";
    -fx-font-size: 16;
    -fx-background-color: -terminal-background-color;
    -fx-border-color: -terminal-foreground-color;
    -fx-text-fill: -terminal-text-color;
}

#TerminalHistoryPane {
    -fx-font-weight: bold;
    -fx-font-family: "FreeMono";
    -fx-font-size: 16;
    -fx-text-fill: -terminal-text-color;
    -fx-background-color: -terminal-background-color;
    -fx-border-color: -terminal-foreground-color;
}

.TerminalHistoryLabel {
    -fx-text-fill: -terminal-text-color;
    -fx-font-family: "FreeMono";
}

В настоящее время строки начинаются сверху и пишутся вниз. Когда они достигают дна, панель сетки начинает расти вместе с ними. Вместо этого я хотел бы перевернуть его так, чтобы первый ряд начинался снизу, а новые - pu sh, а старые - вверх (это можно сделать, сдвинув их вручную на единицу). Когда они достигнут верхней части панели, я бы хотел, чтобы панель была прокручиваемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...