【问题标题】:Not returning anything不返回任何东西
【发布时间】:2017-03-05 22:35:48
【问题描述】:

我有

public void mouseClicked(MouseEvent arg0) {
            Number rs = new Number(); 
            textField_tf.setText(rs.getRandom());
            }

分班

public class Number {

public int getRandom(){ 

Random rand = new Random();

return rand.nextInt(10) + 1;
}


}

当我单击按钮时,TextField 中不会生成任何内容。我对编程很陌生,但如果能指出我哪里出错了,我将不胜感激。

【问题讨论】:

  • 什么是随机字符串?那是你的课吗?
  • 是的,抱歉我忘记更新了。
  • 什么是 RandLetter。展示该课程是获得帮助的关键。
  • 什么?现在你给我们展示的代码更少了???

标签: java eclipse jframe


【解决方案1】:

基于你有限的、脱离上下文的代码 sn-ps,我建议代码甚至无法编译,因为 JTextField#setText 期望 String 而不是 int

例如...

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.border.EmptyBorder;

public class Test {

    public static void main(String[] args) {
        new Test();
    }

    public Test() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                    ex.printStackTrace();
                }

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.add(new TestPane());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

    public class TestPane extends JPanel {

        private JTextField field;

        public TestPane() {
            setBorder(new EmptyBorder(10, 10, 10, 10));
            field = new JTextField(2);
            JButton btn = new JButton("Randomise");

            setLayout(new GridBagLayout());
            GridBagConstraints gbc = new GridBagConstraints();
            gbc.gridwidth = GridBagConstraints.REMAINDER;

            add(field, gbc);
            add(btn, gbc);

            btn.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    Number rs = new Number();
                    field.setText(Integer.toString(rs.getRandom()));
                }
            });

            addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    Number rs = new Number();
                    field.setText(Integer.toString(rs.getRandom()));
                }
            });
        }

    }

    public class Number {

        public int getRandom() {
            Random rand = new Random();
            return rand.nextInt(10) + 1;
        }

    }

}

【讨论】:

    【解决方案2】:

    您需要将“Ran”的声明移到 main 之外。它必须是一个类级别的变量才能让“getRan”函数能够访问它。

    另外,Java 约定是用小写首字母命名该变量。

    编辑。该答案适用于该问题的先前版本。

    Given the new modification to the question:
    public class Number {
        public int getRandom() { 
            Random rand = new Random();
            return rand.nextInt(10) + 1;
        }
    }
    

    这个的主要问题是为每个调用声明一个新的 Random 对象。您应该将 'Random rand = new Random()' 行从函数中移到类级别。

    【讨论】:

    • 好的,那我应该在 main 中放什么?
    • 看起来像这样: public class Number { Random rand = new Random(); public int getRandom() { return rand.nextInt(10) + 1; } }
    • 再次尝试该代码:public class Number { Random rand = new Random(); public int getRandom() { return rand.nextInt(10) + 1; } }
    • 我猜回车在 cmets 中没有出现?