您好我正在制作一个基于gui的数字保理计算器,您可以在JtextField中输入一个数字,然后按一个按钮开始保理。这些因素将在两个一个中出现(在另一个JTextField中),使用while循环之间有5秒的延迟...唯一的问题是我似乎无法弄清楚如何在因子之间产生5秒的延迟
这是我的代码:
`
package gui;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JButton;
class CloseListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent event) {
System.exit(0);
}
}
public class MyWin extends JFrame implements ActionListener{
JTextField name, number, OutputName, OutputNumber;
JButton CreateName, CreateNumber, clear, ok;
MyWin(String title){
super(title);
this.setSize(750,625);
this.init();
this.setVisible(true);
}
void init() {
JLabel lname = new JLabel("What is your name?:");
name = new JTextField(10);
JLabel lnumber = new JLabel("What number do you want to to factor?");
number = new JTextField(10);
OutputName = new JTextField(50);
OutputNumber = new JTextField(50);
JPanel panel = new JPanel();
panel.add(lname);
panel.add(name);
panel.add(lnumber);`enter code here`
panel.add(number);
panel.add(OutputName);
panel.add(OutputNumber);
name.setBounds(375,0,100,25);
lname.setBounds(250,0,150,25);
number.setBounds(425,30,100,25);
lnumber.setBounds(175,30,225,25);
OutputName.setBounds(75,115,300,25);
OutputNumber.setBounds(375,115,300,25);
CreateName = new JButton("Create Name");
CreateNumber = new JButton("Factor number");
clear = new JButton("Clear");
ok = new JButton("Close App");
panel.add(CreateName);
panel.add(CreateNumber);
panel.add(clear);
panel.add(ok);
panel.setLayout(null);
CreateName.setBounds(150,60,150,25);
clear.setBounds(300,60,150,25);
ok.setBounds(450,60,150,25);
CreateNumber.setBounds(295,85,160,25);
CreateName.addActionListener(this);
CreateNumber.addActionListener(this);
clear.addActionListener(this);
ok.addActionListener(new CloseListener());
panel.setBackground(Color.GREEN);
this.add(panel);
}
public void actionPerformed(ActionEvent event) {
if(event.getSource() == CreateName){
String myname = "";
myname = name.getText();
OutputName.setText("Hi " + myname + "!");
}
else if(event.getSource() == CreateNumber){
int mynumber = Integer.parseInt(number.getText());
int x = 1;
if(mynumber == 1){
OutputNumber.setText("1 is only divisible by itself");
}
else if(mynumber > 0){
while(mynumber >= x){
int y = mynumber / x;
if(mynumber % x == 0){
if(mynumber == x * y){
OutputNumber.setText(y + " and " + x);
}
x = x + 1;
}
else if(mynumber != y * mynumber){
x = x + 1;
}
else{
x = x + 1;
}
}
}
}
else if(event.getSource() == clear){
OutputName.setText("");
OutputNumber.setText("");
}
}
}
`
答案 0 :(得分:0)
首先:
不要使用空布局。 Swing旨在与布局管理器一起使用。阅读Layout Manager上Swing教程中的部分,了解更多信息和工作示例。
变量名称不应以大写字母开头。你的大多数名字是正确的,但有些则不是。保持一致!!!
唯一的问题是我似乎无法弄清楚如何在两个因素之间产生5秒的延迟。
我会计算所有因素并将它们放在List中。然后,您可以使用Swing Timer
来安排因子的显示。当计时器触发时,从列表中删除一个因子并显示它。列表清空时,您停止计时器。阅读How to Use Swing Timers上Swing教程中的部分,了解更多信息和示例。
您还可以查看这个简单的Timer example。
这些因素会出现(在另一个JTextField中)
也许你可以使用JTextArea并在文本区域添加一个新行来显示因子。