2014-10-12 25 views
1

这里是我的代码从JFrame类称为终端类没有用户输入的一个原因

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(<arguments>);但当过我打电话,在终端打开它不会要求用户输入,但是当我尝试执行它要求用户输入的body.java ... 我需要帮助,现在...

的body.java
+0

你为什么要以这种方式混合控制台程序和GUI?由于它们以完全相反的方式与用户进行交互,因此无论是完全控制台还是完整GUI都要好得多。 – 2014-10-12 01:26:49

+0

好吧..那么请告诉我,我该怎么办在完整的GUI一些简单的计算? – 2014-10-12 01:32:50

回答

1

你问:

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

同样你会希望避免尝试,因为他们在两个非常不同的方式与用户进行交互混合与控制台程序GUI,如果你不小心控制台可以锁住GUI。请考虑使用所有控制台或所有GUI。

如果你去所有的GUI,一个可能的解决方案是创建一个图形用户界面,类似于什么您已经在与用户名和PIN码做:

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

其他方面的建议:

  • 不要叫不赞成的方法,因为他们弃用了一个很好的理由。相反,Java API通常会告诉你使用什么替代方法。
  • 避免过度使用静态变量和方法,因为这会导致刚性的代码难以测试或增强。
  • 尽量给具有意义,使你的代码变得“自我评论”您的变量的名称。
  • 您的登录窗口应该是某种类型,如模态的JDialog,不是一个JFrame的模态对话框,因为
    • 关闭它不会关闭整个GUI
    • 它会阻止与主互动GUI直到完全处理完毕。
+0

是的,我已经做了登录的事情在GUI 所有我需要做的,另一类是计算,因为它给了我错误的.getText,我试着做了一些修正,互联网给了我。但还没有制定出来 – 2014-10-12 01:46:35

+0

P.S.我的计算起初是在图形用户界面*,但后来它让我生气,所以我改变了终端测试的东西..我唯一的问题是,当终端显示,它不要求用户输入.. – 2014-10-12 01:48:41

+0

和互联网有没有解决这个问题.. – 2014-10-12 01:49:04