显示一个窗口以获取用户输入

时间:2015-04-23 14:45:09

标签: java swing frame

我刚接触Java编程。

我有这两个小项目。

<Grid>
  <TextBox Text="{Binding Path=TestName}" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="TextBox1" VerticalAlignment="Top" Width="479" />
</Grid>

和这一个:

import javax.swing.*;

public class tutorial {

    public static void main(String[] args){
        JFrame frame = new JFrame("Test");
        frame.setVisible(true);
        frame.setSize(300,300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel label = new JLabel("hello");
        JPanel panel = new JPanel();
        frame.add(panel);
        panel.add(label);

        JButton button = new JButton("Hello again");
        panel.add(button);
    }
}

如何将第二个代码添加到第一个代码中,以便用户看到一个窗口,上面写着“你多大了”,并且可以输入他们的年龄。

提前致谢!

4 个答案:

答案 0 :(得分:3)

我不确定你想要的所有东西,因为它是未定义的,但据我所知,你想要一个包含输入字段的JFrame,你可以在其中输入值并显示适当的答案。 我还建议您阅读教程,但如果您有疑问,请不要犹豫。 我希望它与你想要的有点接近。

package example.tutorial;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Tutorial extends JPanel {
    private static final String YOUNG_RESPONSE = "Hi youngster!";
    private static final String ADULT_RESPONSE = "Hello mature!";
    private static final String INVALID_AGE = "Invalid age!";

    private static final int MIN_AGE = 0;
    private static final int MAX_AGE = 100;

    private static JTextField ageField;
    private static JLabel res;

    private Tutorial() {
        setLayout(new BorderLayout());

        JPanel northPanel = new JPanel();
        northPanel.setLayout(new FlowLayout());
        JLabel label = new JLabel("How old are you ? ");
        northPanel.add(label);

        ageField = new JTextField(15);
        northPanel.add(ageField);
        add(northPanel, BorderLayout.NORTH);


        JPanel centerPanel = new JPanel();  
        JButton btn = new JButton("Hello again");
        btn.addActionListener(new BtnListener());
        centerPanel.add(btn);

        res = new JLabel();
        res.setVisible(false);
        centerPanel.add(res);

        add(centerPanel, BorderLayout.CENTER);
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame("Test");
        frame.add(new Tutorial());
        frame.setVisible(true);
        frame.setSize(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    private static class BtnListener implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            String content = ageField.getText();
            int age = -1;
            try{
                age = Integer.parseInt(content);
                if(isValid(age)) {
                    res.setText(age < 18 ? YOUNG_RESPONSE : ADULT_RESPONSE);
                } else {
                    res.setText(INVALID_AGE);
                }
                if(!res.isVisible())
                    res.setVisible(true);
            } catch(NumberFormatException ex) {
                res.setText("Wrong input");
            }
        }

        private boolean isValid(int age) {
            return age > MIN_AGE && age < MAX_AGE;
        }
    }
}

答案 1 :(得分:2)

  

这样用户就会看到一个窗口,上面写着“你多大了几岁”。他们可以输入他们的年龄。

最简单的方法是使用JOptionPane。有关示例和说明,请查看How to Use Dialogs上Swing教程中的部分。

请不要忘记查看其他Swing相关主题的目录,了解有关Swing的基本信息。

答案 2 :(得分:1)

您需要一个输入字段来获取文本,然后在按钮中添加ActionListener,其中包含按下按钮时执行的逻辑。

我修改了您的代码以实现您所描述的内容:

import javax.swing.*;
import java.awt.event.*;

public class tutorial {

    public static void main(String[] args) {
        JFrame frame = new JFrame("Test");
        frame.setVisible(true);
        frame.setSize(300, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JLabel label = new JLabel("hello");
        JPanel panel = new JPanel();
        frame.add(panel);
        panel.add(label);

        final JTextField input = new JTextField(5); // The input field with a width of 5 columns
        panel.add(input);

        JButton button = new JButton("Hello again");
        panel.add(button);

        final JLabel output = new JLabel(); // A label for your output
        panel.add(output);

        button.addActionListener(new ActionListener() { // The action listener which notices when the button is pressed
            public void actionPerformed(ActionEvent e) {
                String inputText = input.getText();
                int age = Integer.parseInt(inputText);
                if (age < 18) {
                    output.setText("Hi youngster!");
                } else {
                    output.setText("Hello mature!");
                }
            }
        });
    }
}

在该示例中,我们不验证输入。因此,如果输入不是整数Integer.parseInt将抛出异常。组件也没有很好地排列。但要保持简单的开始应该这样做。 :)

答案 3 :(得分:0)

这不是一个简单的问题,因为您在一个示例中使用命令行,而在另一个示例中使用Swing GUI。

这是一个有效的例子,我在这里和那里都有评论。 这不是Java最佳实践的地方,它错过了很多验证(只看到在文本字段中输入几个字母或什么都没有时会发生什么。

另外请忽略setLayout(null)和setBounds()语句,它只是一个不使用任何布局管理器的简单示例。

我希望我的评论会帮助你发现java!

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

//You'll need to implement the ActionListener to listen to buttonclicks
public class Age implements ActionListener{

    //Declare class variables so you can use them in different functions
    JLabel label;
    JTextField textfield;

    //Don't do al your code in the static main function, instead create an instance
    public static void main(String[] args){
        new Age();
    }

    // this constructor is called when you create a new Age(); like in the main function above.
    public Age()
    {
        JFrame frame = new JFrame("Test");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300,300);
        frame.setLayout(null);

        JPanel panel = new JPanel();
        panel.setBounds(0,0,300,300);
        panel.setLayout(null);

        label = new JLabel("hello");
        label.setBounds(5,5,100,20);

        // a JTextfield allows the user to edit the text in the field.
        textfield = new JTextField();
        textfield.setBounds(5,30,100,20);

        JButton button = new JButton("Hello again");
        button.setBounds(130,30,100,20);
        // Add this instance as the actionlistener, when the button is clicked, function actionPerformed will be called.
        button.addActionListener(this);

        panel.add(label);
        panel.add(textfield);
        panel.add(button);

        frame.add(panel);
        frame.setVisible(true);
    }

    //Required function actionPerformed for ActionListener. When the button is clicked, this function is called.
    @Override
    public void actionPerformed(ActionEvent e)
    {
        // get the text from the input.
        String text = textfield.getText();

        // parse the integer value from the string (! needs validation for wrong inputs !)
        int age = Integer.parseInt(text);
        if (age<18) 
        {
            //instead of writing out, update the text of the label.
            label.setText("Hi youngster!");
        }
        else 
        {
            label.setText("Hello mature!");
        }
    }
}