JTextField gui帮助java中的数字因子计算器

时间:2015-08-02 18:24:48

标签: java jtextfield

您好我正在制作一个基于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("");
        }
    }
}

`

1 个答案:

答案 0 :(得分:0)

首先:

  1. 不要使用空布局。 Swing旨在与布局管理器一起使用。阅读Layout Manager上Swing教程中的部分,了解更多信息和工作示例。

  2. 变量名称不应以大写字母开头。你的大多数名字是正确的,但有些则不是。保持一致!!!

  3.   

    唯一的问题是我似乎无法弄清楚如何在两个因素之间产生5秒的延迟。

    我会计算所有因素并将它们放在List中。然后,您可以使用Swing Timer来安排因子的显示。当计时器触发时,从列表中删除一个因子并显示它。列表清空时,您停止计时器。阅读How to Use Swing Timers上Swing教程中的部分,了解更多信息和示例。

    您还可以查看这个简单的Timer example

      

    这些因素会出现(在另一个JTextField中)

    也许你可以使用JTextArea并在文本区域添加一个新行来显示因子。