【问题标题】:Terminal class called from JFrame class don't have user inputs for a reason从 JFrame 类调用的终端类由于某种原因没有用户输入
【发布时间】:2014-12-06 21:21:36
【问题描述】:

这是我的代码

import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Login
{
    static BufferedReader dataIn = new BufferedReader(new InputStreamReader(System.in));
    static String a, b, c;
    static int d, z, f, g, h, i, k;
    public static void Login()
    {
        JFrame frame = new JFrame("Login");

        JButton button1 = new JButton("Login");

        JLabel label1 = new JLabel("Username: ");
        JLabel label2 = new JLabel("Pin: ");

        JTextField txt1 = new JTextField(8);
        JPasswordField pass1 = new JPasswordField(8);

        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
        JPanel FormPanel = new JPanel();

        txt1.setBackground(Color.white);
        pass1.setBackground(Color.white);

        panel1.add(label1);
        panel1.add(txt1);
        panel2.add(label2);
        panel2.add(pass1);

        FormPanel.setLayout(new GridLayout(3,8));
        FormPanel.add(panel1);
        FormPanel.add(panel2);
        FormPanel.add(button1);

        pass1.getDocument().addDocumentListener(new DocumentListener() 
        {
          public void changedUpdate(DocumentEvent e) 
          {
            changed();
          }
          public void removeUpdate(DocumentEvent e) 
          {
            changed();
          }
          public void insertUpdate(DocumentEvent e) 
          {
            changed();
          }
          public void changed() 
          {
             if (pass1.getText().equals(""))
             {
               button1.setEnabled(false);
             }
             else 
             {
               button1.setEnabled(true);
             }

          }
        });

        txt1.getDocument().addDocumentListener(new DocumentListener() 
        {
          public void changedUpdate(DocumentEvent e) 
          {
            changed();
          }
          public void removeUpdate(DocumentEvent e) 
          {
            changed();
          }
          public void insertUpdate(DocumentEvent e) 
          {
            changed();
          }
          public void changed() 
          {
             if (txt1.getText().equals(""))
             {
               button1.setEnabled(false);
             }
             else 
             {
               button1.setEnabled(true);
             }

          }
        });

        button1.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                frame.hide();

                Body a = new Body();
                a.Body();
            }
        });

        button1.setActionCommand("Open");

        frame.setContentPane(FormPanel);
        frame.setSize(8,9);
        frame.pack();
        frame.show();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
    }
}

我的 Body.java 是

try
        {
            do
            {
                System.out.print("Working time (hours): ");
                a=dataIn.readLine();
                e=Integer.parseInt(a);

                k=e;
                if(k<8)
                {
                    System.out.print("\nYou have worked undertime");
                    g=e * 30;
                    h=g * 500;
                    i=h-200;
                    System.out.print("\nYour payment (per month) is: " +i);
                }

                if(k>8)
                {
                    System.out.print("\nYou have worked overtime");
                    g=e*30;
                    h=g*500;
                    i=h+200;
                    System.out.print("\nYour payment (per month) is: " +i);
                }

                if(k==8)
                {
                    System.out.print("\nYou have worked ontime");
                    g=e*30;
                    h=g*500;
                    System.out.print("\nYour payment (per month) is: " +h);
                }

                System.out.print("\n\nPress 0 to logout: ");
                c=dataIn.readLine();
                d=Integer.parseInt(c);
            }while(d!=0);
        }

        catch(Exception j)
        {
            System.out.print("\nYou probably need to work for more than an hour to start earning");
        }

当然,我有import java.io.*; 和BufferedReader dataIn = new BufferedReader(&lt;arguments&gt;);,但是当我调用在终端中打开的 body.java 时,它不会要求用户输入,但是当我尝试执行 body.java 时,它会要求用户输入输入... 我现在需要帮助...

【问题讨论】:

  • 您为什么要以这种方式将控制台程序与 GUI 混合在一起?你最好选择完整的控制台或完整的 GUI,因为它们以两种截然相反的方式与用户交互。
  • 好的.. 那么请告诉我如何在完整的 GUI 中进行一些简单的计算?

标签: java swing terminal jframe user-input


【解决方案1】:

你问:

好的..那么请告诉我如何在完整的 GUI 中进行一些简单的计算?

同样,您需要避免尝试将 GUI 与控制台程序混合使用,因为它们以两种非常不同的方式与用户交互,并且如果您不小心,控制台可能会锁定 GUI。而是考虑使用所有控制台或所有 GUI。

如果您使用所有 GUI,一种可能的解决方案是创建一个类似于您已经使用用户名和 PIN 号所做的 GUI:

  • 为用户提供 GUI JTextFields 以输入他的数据。
  • 添加“计算”JButton
  • 在按钮的 ActionListener 中,从 JTextField 中提取数据,将任何字符串转换为需要转换的数字,计算您的值并将其显示在另一个 JTextField 或 JLabel 中。

其他方面的建议:

  • 不要调用已弃用的方法,因为它们已被弃用是有充分理由的。相反,Java API 通常会告诉您可以使用哪些替代方案。
  • 避免过度使用静态变量和方法,因为这会导致难以测试或增强的僵化代码。
  • 尝试为变量命名有意义,以便您的代码能够“自我注释”。
  • 您的登录窗口应该是某种类型的模态对话框,例如模态 JDialog,而不是 JFrame,因为
    • 关闭它不会关闭整个 GUI
    • 在完全处理之前,它将阻止与主 GUI 的交互。

【讨论】:

  • 是的,我已经在 GUI 中完成了我需要做的所有登录操作,在另一个类中是计算,因为它在 .getText 中给了我错误,我尝试对互联网进行一些修复给了我。但还没有解决
  • P.S.我的计算是在 GUI 中起初,但后来让我很生气,所以我改用终端来测试一些东西。我唯一的问题是,当终端显示时,它不会要求用户输入。 .
  • @AndrewAngeloBarrientos:也许这里有一个重要的教训需要吸取,因为有时您无法从互联网上获得修复,而是必须调试您的程序来修复它。
  • 是的,我一直在这样做.. 我只是一个初学者.. 没有书,我不喜欢他们在书中写的方式...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多