我是相对较新的Java程序员(大约两个月的经验),我无法弄清楚如何将数据输入Lanterna(用于创建终端用户界面的库)文本框变成一个字符串供以后使用。
这是我的代码:
//Variables (that I can't seem to populate)
final String usernameIn = null;
final String passwordIn = null;
//Username panel, contains Label and TextBox
Panel username = new Panel(new Border.Invisible(), Panel.Orientation.HORISONTAL);
username.addComponent(new Label("Username: "));
username.addComponent(new TextBox(null, 15));
addComponent(username);
//Password panel, contains label and PasswordBox
Panel password = new Panel(new Border.Invisible(), Panel.Orientation.HORISONTAL);
password.addComponent(new Label("Password: "));
password.addComponent(new PasswordBox(null, 15));
addComponent(password);
//Controls panel, contains Button w/ action
Panel controls = new Panel(new Border.Invisible(), Panel.Orientation.HORISONTAL);
controls.addComponent(new Button("Login", new Action()
{
public void doAction() {
MessageBox.showMessageBox(getOwner(), "Alert", "You entered the username " + usernameIn + " and password " + passwordIn + ".");
}
}));
addComponent(controls);
任何帮助都会非常感激。我已经查看了所有信息,但Lanterna上确实没有多少,而且它是我能找到的唯一允许我制作终端应用程序的最新Java库。 请注意:我知道上面的代码中没有任何内容可以处理输入的数据,我遗漏了所有的尝试,因为它们会导致错误页面上的页面(这是使用错误功能时的预期。
答案 0 :(得分:2)
我查看了Lanterna代码:TextBox
有一个getText()
方法。
作为一个想法:
Panel username = new Panel(new Border.Invisible(), Panel.Orientation.HORISONTAL);
username.addComponent(new Label("Username: "));
TextBox userBox = new TextBox(null, 15);
username.addComponent(userBox);
addComponent(username);
// ... and later elsewhere
usernameIn = userBox.getText();
Shure,您需要对userBox的引用,以便稍后在代码中的其他位置获取内容。
如果值发生了变化,Lanterna还有一个ComponentListener接口来响应:
Panel username = new Panel(new Border.Invisible(), Panel.Orientation.HORISONTAL);
username.addComponent(new Label("Username: "));
TextBox userBox = new TextBox(null, 15);
userBox.addComponentListener(new ComponentListener() {
void onComponentValueChanged(InteractableComponent component) {
usernameIn = ((TextBox)component).getText();
}
});
username.addComponent(userBox);
addComponent(username);
这似乎更清晰。
答案 1 :(得分:0)
addComponent()
课程中没有TextBox
方法, Lanterna ver3.0.0-beta2
。
因此,请在readInput()
中使用Screen
。
下面的示例表示用户按Enter键时,从TextBox获取文本。
private Screen screen;
private TextBox textBox;
private final String emptyString = "";
...
public String getText() throws IOException {
String result = null;
KeyStroke key = null;
while ((key = screen.readInput()).getKeyType() != KeyType.Enter) {
textBox.handleKeyStroke(key);
// use only one of handleInput() or handleKeyStroke()
textBox.setText(textBox.getText());
}
result = textBox.getText();
textBox.setText(emptyString);
return result;