单击按钮时如何调用方法

时间:2019-05-16 06:45:45

标签: java swing

嗨,我正在写一个小软件。它是这样工作的:您在textField中输入了任何数字,当您单击按钮时,它将显示MessageDialog是否为质数。我在这里放了我的代码,但是当我单击按钮时,什么都没有发生。我做错了吗?希望每个人都能帮助我。谢谢

我试图更改代码,但不起作用

    JLabel lblPrimeNumberChecker = new JLabel("Prime number checker");
    lblPrimeNumberChecker.setBounds(160, 11, 117, 14);
    contentPane.add(lblPrimeNumberChecker);


    JButton btnReset = new JButton("Reset");
    btnReset.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            textNum.setText(null);

        }
    });
    btnReset.setBounds(271, 208, 89, 23);
    contentPane.add(btnReset);

    textNum = new JTextField();
    textNum.setBounds(144, 42, 231, 20);
    contentPane.add(textNum);
    textNum.setColumns(10);

    JLabel lblNewLabel = new JLabel("Enter number");
    lblNewLabel.setBounds(62, 45, 82, 14);
    contentPane.add(lblNewLabel);

    JButton btnCheck = new JButton("Check");
    btnCheck.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent checkPrime) {

        }
        private boolean checkPrime(int n) {
            int num=Integer.parseInt(textNum.getText());
             if(num<2) {
                 return false;
             }
             int h=(int)Math.sqrt(n);
             for(int i=2;i<=h;i++) {
                 if(n%i==0) {
                     return false;
                 }
             }
                    return true;     


        }
            void button_clicked() {
                int n=0;
                boolean isPrime=checkPrime(n);
                if(isPrime) {
                    JOptionPane.showMessageDialog(btnCheck, "Prime number", "Result", JOptionPane.INFORMATION_MESSAGE);
                }
                else {
                    JOptionPane.showMessageDialog(btnCheck, "Not prime number", "Result", JOptionPane.INFORMATION_MESSAGE);
                }
            }


            });
    btnCheck.setBounds(62, 208, 89, 23);
    contentPane.add(btnCheck);

我希望当您在文本字段中输入数字并单击按钮后,它将显示您是否是素数

1 个答案:

答案 0 :(得分:0)

在您发布的代码中,对方法setBounds()的所有调用都暗示您正在使用GUI构建器。您正在使用IDE吗?如果是这样,哪一个? GUI生成器对精通 Swing 应用程序的人很有用,因为它们可以节省时间,但我不建议学习者使用它们。首先,要自己编写所有代码,学习编写 Swing 应用程序。例如,在使用GUI构建器时,很难学习如何使用布局管理器。在我看来,布局管理器是 Swing 的非常重要的一部分。

我自由地重写了您的应用程序。代码如下。我建议,假设您还没有找到一个好的资源,它将帮助您学习如何编写 Swing 应用程序,前提是您尚未这样做。我建议在线教程Creating a GUI With JFC/Swing。我什至更推荐金·托普利(Kim Topley)的书Core JFC (2nd Edition)。是的,它现在已经很老了,但是仍然很有意义。

这是我的代码...

import java.awt.BorderLayout;
import java.awt.EventQueue;
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.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;

public class PrimeNo implements Runnable {
    JFrame frame;
    JTextField textNum;

    public void run() {
        showGui();
    }

    private boolean checkPrime(int n) {
        if (n < 2) {
            return false;
        }
        int h = (int) Math.sqrt(n);
        for (int i = 2; i <= h; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }

    private JPanel createButtonsPanel() {
        JPanel buttonsPanel = new JPanel();
        JButton btnReset = new JButton("Reset");
        btnReset.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                textNum.setText(null);
            }
        });
        buttonsPanel.add(btnReset);
        JButton btnCheck = new JButton("Check");
        btnCheck.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String str = textNum.getText();
                try {
                    int n = Integer.parseInt(str);
                    if (checkPrime(n)) {
                        JOptionPane.showMessageDialog(frame,
                                                      "Prime number: " + str,
                                                      "Result",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                    else {
                        JOptionPane.showMessageDialog(frame,
                                                      "Not prime number: " + str,
                                                      "Result",
                                                      JOptionPane.INFORMATION_MESSAGE);
                    }
                }
                catch (NumberFormatException xNumFormat) {
                    JOptionPane.showMessageDialog(frame,
                                                  "Not a number: " + str,
                                                  "Error",
                                                  JOptionPane.ERROR_MESSAGE);
                }
            }
        });
        buttonsPanel.add(btnCheck);
        return buttonsPanel;
    }

    private JPanel createInputPanel() {
        JPanel inputPanel = new JPanel();
        JLabel lblNewLabel = new JLabel("Enter number");
        inputPanel.add(lblNewLabel);
        textNum = new JTextField(10);
        inputPanel.add(textNum);
        return inputPanel;
    }

    private void showGui() {
        frame = new JFrame("Prime Number Checker");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(createInputPanel(), BorderLayout.PAGE_START);
        frame.add(createButtonsPanel(), BorderLayout.PAGE_END);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        PrimeNo primeNo = new PrimeNo();
        EventQueue.invokeLater(primeNo);
    }
}