Java:我如何在不使用actionListener的情况下检测到用户已经完成了他们的保存名称



基本上我不想从用户那里获得字符串,我创建了一个名为"frames"的类,其中有很多方法,如exitChoice((、infoPop((等。。。我希望创建一个名为getText((的程序,这就是我目前所拥有的:

        public String getText()
        {
            JDialog textBox = new JDialog(frame, "Save Name", true);
            JTextField inputField = new JTextField(18);
            inputField.setText(save == null ? "new save" : save.saveName);
            textBox.setBounds(width, height, 275, 70);
            textBox.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
            textBox.setLayout(new FlowLayout());
            textBox.setAlwaysOnTop(true);
            textBox.setResizable(false);
            textBox.add(inputField);
            textBox.setVisible(true);
            return inputField.getText();
        }

现在我知道这不起作用了,它只是让游戏陷入困境,我必须从外部终止它,我也明白为什么它不起作用,这不是问题所在,我也知道如何添加JButton,一个动作监听器,并从那里开始工作,

基本上,我试图创建一个干净简单的方法,它从用户那里获得一个String,该String全部包含在该方法中。

理想情况下,我想写一行沿着的行读取

//编辑:我知道getText((方法确实存在,很抱歉,如果它有误导性,我会修改它的

//String saveName = new JTextField.getText();
String saveName = new JTextInputGetterBoxThing();

但据我所知,到目前为止,这似乎并不存在,有人有什么想法吗?或者最理想的情况是知道我错过了一条班轮吗?

我认为您想要的是JOptionPane.showInputDialog方法。像这样的东西?

public class GetUserInput {
    public static String getUserInput() {
        return JOptionPane.showInputDialog("Type Something");
    }
    public static void main(String[] args) {
        System.out.println("User Input: " + getUserInput());
    }
}

这显示了一个对话框,其中包含提示"键入某物"和一个用于输入的文本字段。无论用户在文本字段中键入什么,都由getUserInput()返回。

老实说,我不确定是否完全理解你的问题。无论如何这里有一个关于如何在Swing中正确制作对话框的教程。

如果您使用

int ret = JOptionPane.showOptionDialog(new JDialog(), ...);

您的应用程序主框架输入被阻止,直到显示的JDialog关闭。如果你不想使用ActionListener或类似的东西(DocumentListener,…(,你可以强制用户在JTextField中插入一个值,按下ok按钮,当showOptionDialog返回时,用getText((手动检索JTextField的文本。

编辑:我试着把我的答案再延伸一点。扩展JDialog以创建所需的对话框:

public class CustomDialog extends JDialog{
    private JPanel panel;
    private JTextField field;
    public CustomDialog(){
        panel = new JPanel(); //create a panel possibly with a LayoutManager
        field = new JTextField();
    }
    public JTextField getField(){
        return this.field;
    }
}

然后在需要的地方显示对话框,并在返回时检查字段文本:

CustomDialog dialog = new CustomDialog();
int ret = JOptionPane.showOptionDialog(dialog, ...);
String text = dialog.getField().getText();
        public String getSaveName()
        {
            boolean textGot = false;
            String returnText = null;
            while (!textGot)
                {
                    returnText = (String) JOptionPane.showInputDialog(hub.frame, "Enter the name of your save:n", "Save Box",
                            JOptionPane.PLAIN_MESSAGE, null, null, save == null ? "new save" : save.saveName);
                    if ((returnText != null) && (returnText.length() > 0))
                        {
                            textGot = true;
                        }
                }
            return returnText;
        }

这是我使用的最后一种方法,比我以前的设置要干净得多,以前的设置包括创建一个小框架,并添加一个文本字段和一个带有监听器的按钮!

相关内容

  • 没有找到相关文章

最新更新