Мы пытаемся подсчитать количество строк в TextArea
Вот свойства TextArea PrefWidth 600 и PrefHeight 620 с MaxHeight 620
Wrap Text установлен в true. Мы используем JavaFX 8 с Scene Builder
У нас есть textPropertyListiner, который будет запускать оповещение, когда TextArea.getLength больше некоторого значения
Проблема, связанная с этим методом, заключается в том, что пользователь не вводит возврат каретки \n
Таким образом, мы реализовали этот код для захвата \ n
String toCount = txaDiaryEntry.getText();
String [] lineArray = toCount.split("\n");
int LA = lineArray.length - 1;
if(LA == 0){
rc = rc - 1;
System.out.println("###### LA "+LA+" RC "+rc);
}
Тест if всегда равен нулю, поэтому он запускается каждый раз, когда пользователь вводит что-либо после одной кареткивозвращение введено
Этот код находится внутри textPropertyListiner
Когда введенный текст выполняет перенос строки, \ n не создается
Мы просмотрели множество старых постов и попробовали несколько примеров без результатов
Вопрос состоит в том, как подсчитать строки в TextArea, у которого есть возврат каретки и перенос строки - это правда?
Во время тестирования я заметил, что некоторые проблемы с опубликованным кодом заключаются в том, что значение LA продолжает увеличиваться,Поскольку мы редко работаем с массивом, я предполагаю, что массив нужно очистить, когда значение достигнет 1
Так что, если кто-то захочет объяснить, как этого добиться с помощью этого массива String [], мы дадим тест
Мы изменили код вопроса, чтобы отразить рабочий пример подсчета ОБОИХ строк и когда пользователь нажимает клавишу ВВОД. Хотя это работает, мы могли бы добавить, что использование счетчика строк для предотвращения дальнейшего ввода текста не так выгодно, как подсчет количества символов в TextArea.
@Override
public void initialize(URL url, ResourceBundle rb) {
txtTitle.setStyle("-fx-text-fill: black;");
getDate();
if(doEDIT.equals("TRUE")){
btnEdit.setVisible(true);
btnSave.setVisible(false);
try {
ReadChildTable();
} catch (SQLException ex) {
Logger.getLogger(EnterController.class.getName()).log(Level.SEVERE, null, ex);
}
}
try {
ReadParent();
} catch (SQLException | IOException ex) {
Logger.getLogger(EnterController.class.getName()).log(Level.SEVERE, null, ex);
}
txaDiaryEntry.textProperty().addListener((observable, oldValue, newValue) -> {
EC = txaDiaryEntry.getLength();
tEC = tEC + 1;
// this counts line wraps every 62 char
if(tEC == 62){
RC = RC - 1;
tEC = 0;
}
// This counts ENTER key presses
String toCount = txaDiaryEntry.getText();
String [] lineArray = toCount.split("\n");
LA = lineArray.length - 1;
if(LA == tLA){
tLA = LA + 1;
RC = RC - 1;
}else if(tLA < LA){
tLA = LA + 1;
RC = RC - (LA - 1);
}else{
}
// This test counter
int minus = EC+(LA * 40);
int val = 1200 - minus ;
txtCR.setText(String.valueOf(val));
uEC = uEC - val;
if(LA == 0){
uEC = 1200;
}else{
uEC = 960;// 880
}
if(EC > uEC){
//if(RC == 0){
alertTYPE = "4";
//RC = RC + 1;
try {
customAlert();
} catch (IOException ex) {
Logger.getLogger(EnterController.class.getName()).log(Level.SEVERE, null, ex);
}
txaDiaryEntry.requestFocus();
}
});
}
См. Комментарии в кодекак этот метод управляет другими задачами.