嗨,我正在写一个小软件。它是这样工作的:您在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);
我希望当您在文本字段中输入数字并单击按钮后,它将显示您是否是素数
答案 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);
}
}