Как вызвать метод, когда вы нажали кнопку - PullRequest
2 голосов
/ 16 мая 2019

Привет, я пишу немного программного обеспечения. Вот как это работает: вы вставляете в 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 голосов
/ 16 мая 2019

Все вызовы метода setBounds() в опубликованном вами коде подразумевают, что вы используете конструктор GUI.Вы используете IDE?Если да, то какой?Разработчики графического интерфейса могут быть полезны для людей, которые умеют писать Swing приложения, поскольку они могут экономить время, но я не рекомендую их для учащихся.Сначала научитесь писать Swing приложения, написав весь код самостоятельно.Например, сложно научиться использовать менеджеры компоновки при использовании GUI Builder.А менеджеры по расположению, на мой взгляд, являются очень важной частью Swing .

Я позволил себе переписать ваше приложение.Код ниже.Я предлагаю, если вы еще этого не сделали, найти хороший ресурс, который поможет вам научиться писать приложения Swing .Я рекомендую интерактивный учебник Создание графического интерфейса с помощью JFC / Swing .Еще больше я рекомендую книгу 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...