зависимость в конструкторе, производительности и дизайне кода - PullRequest
0 голосов
/ 12 апреля 2019

У меня проблемы с пониманием этой идеи.У меня есть 1 основной контроллер, и теперь я хочу перенести свои зависимости из контроллера в класс TextAreaController, когда я хочу, например, добавить значение textArea.Так что это хорошая идея, чтобы создать в конструкторе класса TextAreaController с полями из контроллера (например, textArea и textField) и затем в контроллере инициализировать мой класс TextAreaController?Итак, следующий вопрос заключается в том, что в контроллере должны быть только обработчики событий?И это хорошая идея, чтобы назвать TextAreaController в качестве контроллера?

Вот ссылка на код, если вы можете просмотреть его, я буду благодарен.

public class MainViewController implements Initializable {

    @FXML
    private TextArea textArea;
    @FXML
    private TextField textField;
    @FXML
    private MenuItem menuItem;

    private DataFromTxtFile outputDataFromFile;
    private TextAreaController inputText;

    @Override
    public void initialize(URL url, ResourceBundle resourceBundle) {
        textArea.appendText("Wybierz plik źródłowy z tekstem: File -> Load new file\n" );
        outputDataFromFile = new DataFromTxtFile();
        inputText = new TextAreaController(textField,textArea);
    }

    public void onClick(ActionEvent actionEvent){
      menuItem.setOnAction(new EventHandler<ActionEvent>() {
          @Override
          public void handle(ActionEvent actionEvent) {
              try {
                 inputText.setLines(outputDataFromFile.readLineFromFile());
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      });
    }


    public void pressedEnter(ActionEvent actionEvent){
        textField.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent keyEvent) {
                if(keyEvent.getCode().equals(KeyCode.ENTER)){
                    try {
                        inputText.addToTextArea();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }

}
public class TextAreaController {

    private TextField textField;
    private TextArea textArea;

    private Queue<String> lines;

    TextAreaController(TextField textField, TextArea textArea){
        this.textField = textField;
        this.textArea = textArea;
    }

    public void addToTextArea() throws IOException {
        if(lines.size() == 0) //TODO co wtedy
        textArea.appendText(lines.poll()+"\n");
    }


    public void setLines(Queue<String> lines) {
        this.lines = lines;
    }
}

1 Ответ

0 голосов
/ 17 апреля 2019

Вы хотите, чтобы ваш TextAreaController был DataFileModel и сохранял поля очереди очереди.Вы хотите связать TextAreaController.textproperty с содержанием значения строки.Вы можете сделать это несколькими способами.Поиск привязки свойства FX:

https://www.dummies.com/programming/java/javafx-binding-properties/

Текстовое поле не нужно связывать с DataFileModel.Вам просто нужно отправить его содержимое в очередь, когда вы нажмете Enter.Как только ваша очередь будет добавлена, связанная текстовая область обновится автоматически.

Возможно, вы захотите изменить очередь на наблюдаемый список или другой наблюдаемый тип, чтобы сделать его лучше.

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