JavaFX TextArea 包含带 String.split() 的空行?
JavaFX TextArea include empty line with String.split()?
一段时间以来,我一直在努力解决这个问题,但还是无法让它发挥作用。本质上,我有一个 JavaFX TextArea,我想用输入的最后一行(即按下 ENTER 键后插入符号上方的行)构造一个名为 CommandWrapper 的新对象。每当我在键入命令后按 ENTER 时,它都能完美运行,但由于某种原因,如果我不输入下面 GIF 中显示的任何命令,我的 String.split() 函数将不会得到空行:
这里是关于这个问题的代码:
package com.mswordhf.jnet.java.contollers;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.ResourceBundle;
import com.mswordhf.jnet.java.models.JnetModel;
import com.mswordhf.jnet.java.modules.CommandWrapper;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextArea;
import javafx.scene.input.KeyCode;
public class CmdController implements Initializable {
private JnetModel model;
private int clientIndex;
@FXML private TextArea commandTextArea;
public CmdController(JnetModel model, int clientIndex) {
this.model = model;
this.clientIndex = clientIndex;
}
@Override
public void initialize(URL url, ResourceBundle rb) {
commandTextArea.setOnKeyPressed(keyEvent -> {
if(keyEvent.getCode() == KeyCode.ENTER) {
List<String> lines = Arrays.asList(commandTextArea.getText().split("\n"));
String command = lines.get(lines.size() - 1);
System.out.println(command);
if(command == "\n") {
System.out.println("Worked");
}else {
CommandWrapper wrapper = new CommandWrapper(command);
model.getClients().get(clientIndex).getHandle().sendModule(wrapper);
if(!model.getCmdOutput.isRunning()) {
model.getCmdOutput.reset();
model.getCmdOutput.start();
}
}
}
});
model.getCmdOutput.setOnSucceeded(event -> {
for(String line : model.getCmdOutput.getValue()) {
commandTextArea.appendText(line + "\n");
}
model.clearList();
});
}
}
我真的不确定为什么,但是使用:
commandTextArea.setOnKeyReleased(keyevent -> {
//code...
}
完全按预期工作。
一段时间以来,我一直在努力解决这个问题,但还是无法让它发挥作用。本质上,我有一个 JavaFX TextArea,我想用输入的最后一行(即按下 ENTER 键后插入符号上方的行)构造一个名为 CommandWrapper 的新对象。每当我在键入命令后按 ENTER 时,它都能完美运行,但由于某种原因,如果我不输入下面 GIF 中显示的任何命令,我的 String.split() 函数将不会得到空行:
这里是关于这个问题的代码:
package com.mswordhf.jnet.java.contollers;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.ResourceBundle;
import com.mswordhf.jnet.java.models.JnetModel;
import com.mswordhf.jnet.java.modules.CommandWrapper;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextArea;
import javafx.scene.input.KeyCode;
public class CmdController implements Initializable {
private JnetModel model;
private int clientIndex;
@FXML private TextArea commandTextArea;
public CmdController(JnetModel model, int clientIndex) {
this.model = model;
this.clientIndex = clientIndex;
}
@Override
public void initialize(URL url, ResourceBundle rb) {
commandTextArea.setOnKeyPressed(keyEvent -> {
if(keyEvent.getCode() == KeyCode.ENTER) {
List<String> lines = Arrays.asList(commandTextArea.getText().split("\n"));
String command = lines.get(lines.size() - 1);
System.out.println(command);
if(command == "\n") {
System.out.println("Worked");
}else {
CommandWrapper wrapper = new CommandWrapper(command);
model.getClients().get(clientIndex).getHandle().sendModule(wrapper);
if(!model.getCmdOutput.isRunning()) {
model.getCmdOutput.reset();
model.getCmdOutput.start();
}
}
}
});
model.getCmdOutput.setOnSucceeded(event -> {
for(String line : model.getCmdOutput.getValue()) {
commandTextArea.appendText(line + "\n");
}
model.clearList();
});
}
}
我真的不确定为什么,但是使用:
commandTextArea.setOnKeyReleased(keyevent -> {
//code...
}
完全按预期工作。