繁体   English   中英

JTextField GUI帮助Java中的数字分解计算器

[英]JTextField gui help for number factoring calculator in java

嗨,我正在制作一个基于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. 不要使用空布局。 Swing旨在与布局管理器一起使用。 阅读有关布局管理器的Swing教程中的部分,以获取更多信息和工作示例。

  2. 变量名称不应以大写字母开头。 您的大多数姓名正确,但有些不正确。 始终如一!!!

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

我会计算所有因素并将它们放在列表中。 然后,您可以使用Swing Timer安排因素的显示。 当计时器触发时,您从列表中删除一个因子并显示它。 当列表为空时,停止计时器。 阅读Swing教程中有关如何使用Swing计时器的部分, 获取更多信息和示例。

您也可以查看这个简单的Timer示例

这些因素将出来(在另一个JTextField中)

也许您可以使用JTextArea并在文本区域中添加新行以显示因子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM