【问题标题】:java input JTextfieldjava输入JTextfield
【发布时间】:2018-12-03 11:57:54
【问题描述】:

我有问题。用户输入(inputUser)必须与随机数进行比较。它有点像赌博程序。 但我不知道如何比较输入的用户字符串和随机数。之后比较输出是在一个对话框中。 用户的输入带有一个字符串,随机数带有一个 int。我已经尝试将 int 转换为字符串。但由于某种原因它不起作用。

package gamble;
import java.awt.Color;
import java.awt.Font;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import java.util.Random;
import java.util.Scanner;

public class Gamble extends JFrame {

public JLabel inputUser;
public JPanel panel;

Font myFont = new Font("Serif", Font.BOLD, 25);
Font rulesFont = new Font("Serif", Font.BOLD, 15);

 public static void main(String[] args) {
   Gamble GUI = new Gamble();
   GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   GUI.setSize(600, 600);
   GUI.setResizable(false);
   GUI.setVisible(true);
   GUI.setLocationRelativeTo(null);
}    

public Gamble(){
    super("NUMERO");

   JPanel panel = new JPanel();
   panel.setLayout(null);
   add(panel); 

   //nieuwe label
   JLabel label = new JLabel("Raad het getal");
   label.setLayout(null);
   label.setBounds(250,10, 300, 30);
   label.setFont(myFont);
   panel.add(label);

   //nieuwe label
   JLabel rules = new JLabel("Gok een nummer tot en met 5"); 
   rules.setBounds(225,40,300,30);
   rules.setFont(rulesFont);
   panel.add(rules);

   //nieuw textfield
   JTextField inputUser = new JTextField(100);
   inputUser.setBounds(275,100,100,30);
   inputUser.setFont(rulesFont);
   inputUser.setBackground(Color.LIGHT_GRAY );
   panel.add(inputUser);

   thehandler handler = new thehandler();
   inputUser.addActionListener(handler);
}

private class thehandler implements ActionListener {

    public void actionPerformed(ActionEvent event){

        Random rand = new Random(); //random number 
        int n = rand.nextInt(5) + 1; //random number wordt gemaakt

        int j = Integer.parseInt(inputUser.getText());

        if (event.getSource()== inputUser){ 
            if(n == j){
            JOptionPane.showMessageDialog(null, "test");
            }
        }
        else {
            JOptionPane.showMessageDialog(null, "dfd"); 
        }  
    }  
}

}

【问题讨论】:

  • 您是否尝试将两个数字打印到控制台,并查看它们是否相等? else 块是否被执行或者代码也没有到达那个点?

标签: java swing


【解决方案1】:

inputUser的声明有些问题,把它的全局声明改成JTextField,去掉它的局部声明即可。

代码应如下所示:

class Gamble extends JFrame {

public JTextField inputUser;
public JPanel panel;

Font myFont = new Font("Serif", Font.BOLD, 25);
Font rulesFont = new Font("Serif", Font.BOLD, 15);

public static void main(String[] args) {
    Gamble GUI = new Gamble();
    GUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    GUI.setSize(600, 600);
    GUI.setResizable(false);
    GUI.setVisible(true);
    GUI.setLocationRelativeTo(null);
}

public Gamble(){
    super("NUMERO");

    JPanel panel = new JPanel();
    panel.setLayout(null);
    add(panel);

    //nieuwe label
    JLabel label = new JLabel("Raad het getal");
    label.setLayout(null);
    label.setBounds(250,10, 300, 30);
    label.setFont(myFont);
    panel.add(label);

    //nieuwe label
    JLabel rules = new JLabel("Gok een nummer tot en met 5");
    rules.setBounds(225,40,300,30);
    rules.setFont(rulesFont);
    panel.add(rules);

    //nieuw textfield
    inputUser = new JTextField(100);
    inputUser.setBounds(275,100,100,30);
    inputUser.setFont(rulesFont);
    inputUser.setBackground(Color.LIGHT_GRAY );
    panel.add(inputUser);

    thehandler handler = new thehandler();
    inputUser.addActionListener(handler);
}

private class thehandler implements ActionListener {

    public void actionPerformed(ActionEvent event){

        Random rand = new Random(); //random number
        int n = rand.nextInt(5) + 1; //random number wordt gemaakt

        int j = Integer.parseInt(inputUser.getText());

        if (event.getSource()== inputUser){
            if(n == j){
                JOptionPane.showMessageDialog(null, "Yep, you're right");
            }
            else {
                JOptionPane.showMessageDialog(null, "Nope nope nope, the number is " + n);
            }
        }
    }
}
}

【讨论】:

  • 这个是正确的,也许可以添加一些关于阴影变量如何导致难以检测到像这里创建的空指针的解释?
  • 嗯,众所周知,Java允许这个东西(实例变量和局部变量同名),编译器会编译不报错。所以这不是语法错误,但它属于逻辑错误类别,其中inputUser 在本地范围内重新声明并分配,因此实例变量根本不会改变,这实际上导致空指针异常,在这个如果数据类型还有一个错误。
猜你喜欢
  • 2013-04-29
  • 2010-12-16
  • 1970-01-01
  • 1970-01-01
  • 2012-12-21
  • 2021-02-13
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多