4

私は比較的新しい Java プログラマー (約 2 か月の経験) で、後で使用するために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 ライブラリです。注意: 上記のコードには、入力されたデータを処理するものがないことは承知しています。ページごとにエラーが発生したため、すべての試行を省略しました (これは、間違った関数を使用した場合に予想されることです)。

4

2 に答える 2

2

私は Lanterna コードを調べました: TextBoxhas a getText()method.

アイデアとして:

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);

それはさらにきれいに見えます。

于 2014-04-13T15:28:59.557 に答える
0

クラスにはaddComponent()メソッドがありません で使用します。以下のサンプルは、ユーザーが Enter キーを押したときに、TextBox からテキストを取得することを表しています。TextBoxLanterna ver3.0.0-beta2readInput()Screen

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;
于 2016-03-15T07:41:58.880 に答える