如何在不等待来自用户的Gui输入的情况下阻止Java运行整个代码

时间:2011-10-15 14:34:15

标签: java swing user-interface modal-dialog sequence

我是Java的新手,我只是在寻求一些帮助。我试图创建一个程序,允许用户输入gui的名称和> >百货商店的位置。它允许这样但是程序不等待输入>细节它只是初始化Gui类并继续使用>处理将输入Gui的细节添加到数组列表中。但尚未输入>详细信息,因此它创建了一个空值,因为它已经跳过了>提前。

那么我怎样才能让它停下来等到输入值然后再提交?

以下是代码的Gui组件:

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

public class guiDepartment extends JFrame
{



    private String  depName;
    private String  depLocation;
    private static Department newDepartment;
    private JTextField departmentDetails1;
    private JTextField departmentDetails2;
    private JTextField departmentDetails3;


    private Employee worksInInTheDepartment;


    public guiDepartment()
    {
        System.out.println("bob the builder ");

        JButton submit;
        JButton b1;


        JFrame frame = new JFrame();

        departmentDetails1 = new JTextField(10);


        departmentDetails2 = new JTextField(10);


        departmentDetails3 = new JTextField(10);


        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(new Dimension(320, 75));
        frame.setTitle("Department Details");

        frame.setLayout(new FlowLayout());

        frame.add(new JLabel("Please enter department Name: "));
        frame.add(departmentDetails1);
        ButtonListenerDepName dListener = new ButtonListenerDepName();
        System.out.println(depName);

        frame.add(new JLabel("Please enter department location: "));
        frame.add(departmentDetails2);
        ButtonListenerDepName1 dListener1 = new ButtonListenerDepName1(); 




        b1  = new JButton  ("Submit");

        ButtonListener listener = new ButtonListener();
        b1.addActionListener(listener);
        b1.addActionListener(dListener);
        b1.addActionListener(dListener1);
        frame.add(b1);
        frame.pack();
        frame.setSize(300,300);
        frame.setVisible(true);



    }

    public class ButtonListenerDepName implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
            depName = departmentDetails1.getText(); 
            System.out.println("and This is the departments name :"+ depName);      
        } 
    }

    public class ButtonListenerDepName1 implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
            depLocation = departmentDetails2.getText(); 
            System.out.println("and This is the departments location :"+ depLocation);  
        } 
    }


    public class ButtonListener implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
            //create a new department and then adds it to thee system
            newDepartment = new Department(depName, depLocation);
        } 
    }

    public static Department getDepartment()
    {
        return newDepartment;
    }
}

>>and this is the Main class

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



public class MainWelcomeGui1 
{

        JFrame frame = new JFrame();

        JButton b1  ;   
        JButton b2  ; 
        JButton b3  ; 
        JButton b4  ;
        JButton b5  ;
        JButton b6  ;
        JButton b7  ;
        JButton b8  ;
        JButton b9  ;
        JButton b10 ;
        JButton b11 ;
        JButton b12 ;

        private String  fName;
        private String  sName;
        private String  gender;
        private String  pLevel;
        private String  empIDnumber;
        private int     dPayLevel;

        private static  ArrayList<Employee> allEmployees = new ArrayList<Employee>(); 
        private static  ArrayList<Department> allDepartments = new ArrayList<Department>(); 




    public MainWelcomeGui1()
    {
        frame.setTitle("Human Resources allocation screen");


        JLabel  hdr = new JLabel ("Welcome to the Human Resources employee control system");


         b1  = new JButton  ("Add a new department");
         ButtonListener listener = new ButtonListener();
         b1.addActionListener(listener);
        // addDepartmentToSystem();

         b2  = new JButton  ("Add a new employee to the system");
         ButtonListener listener1 = new ButtonListener();
         b2.addActionListener(listener1);

         b3  = new JButton  ("Alter a employees details");
         ButtonListener listener2 = new ButtonListener();
         b3.addActionListener(listener2);

         b4  = new JButton  ("Add a employee to a department of my choice");
         ButtonListener listener3 = new ButtonListener();
         b4.addActionListener(listener3);

         b5  = new JButton  ("Assign a employee to a department");
         b6  = new JButton  ("Designate a employee as department head");
         b7  = new JButton  ("Delete a department");
         b8  = new JButton  ("To delete an employee from the system");
         b9  = new JButton  ("To see a list of all employees assigned to a particular department");
         b10 = new JButton  ("To see the amounts needed to be paid fortnightly");
         b11 = new JButton  ("To chane an employees pay level");
         b12 = new JButton  ("To change an employees name");
        frame.setLayout (new GridLayout (6, 6));

        frame.setBackground  (Color.green);


        frame.add(hdr,BorderLayout.NORTH);

        frame.add (b1);
        frame.add (b2);
        frame.add (b3);
        frame.add (b4);
        frame.add (b5);
        frame.add (b6);
        frame.add (b7);
        frame.add (b8);
        frame.add (b9);
        frame.add (b10);
        frame.add (b11);
        frame.add (b12);


        frame.setSize(400, 100);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args)
    {
        new MainWelcomeGui1();

    }

    private class ButtonListener implements ActionListener
    {
        public void actionPerformed (ActionEvent e )
        {
            if (e.getSource() == b1)
            {
                guiDepartment guiDepartment = new guiDepartment();
                System.out.println("i should really come after bob the builder");
                addDepartmentToSystem();    
            } 
            else if (e.getSource() == b2)  
            {   
                guiEmployee1 theGuiEmployee = new guiEmployee1();   
            }
            else if (e.getSource() == b3)
            {
                System.out.println("hello1 button 2");
            }
            else if (e.getSource() == b4)
            {
                System.out.println("hello button 3");
            }   
                else if (e.getSource() == b5)  
            {   
                guiEmployee1 theGuiEmployee = new guiEmployee1();   
            }
            else if (e.getSource() == b6)
            {
                System.out.println("hello1 button 2");
            }
            else if (e.getSource() == b7)
            {
                System.out.println("hello button 3");
            }   


        } 
    }

    public  void addDepartmentToSystem()
    {

        Department departmentToAdd = new Department("berel","sam") ; 

        System.out.println("to two");

        System.out.println(departmentToAdd);

        departmentToAdd = guiDepartment.getDepartment();

        System.out.println("got to three");

        allDepartments.add(departmentToAdd);

        System.out.println("to four+");

        System.out.println(allDepartments);
    }

}

1 个答案:

答案 0 :(得分:5)

你不应该让JFrame启动其他JFrame,特别是如果你希望子窗口像一个模态对话框一样 - 一个对话框,它会停止启动窗口中的代码,直到完全处理完为止。在这种情况下,通过使用模态JDialogs代替对话框窗口的JFrames,使对话框窗口对话框

例如:

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

public class MainWelcomeGui2 {
   public static void main(String[] args) {
      final JFrame frame = new JFrame("Main GUI");

      JButton addDeptButtonLaunchJFrame = new JButton(
            "Add a New Department, Launch JFrame");
      JButton addDeptButtonLaunchJDialog = new JButton(
            "Add a New Department, Launch JDialog");

      addDeptButtonLaunchJDialog.addActionListener(new LaunchJDialogListener(
            frame));
      addDeptButtonLaunchJFrame.addActionListener(new LaunchJFrameListener());

      JPanel panel = new JPanel();
      panel.add(addDeptButtonLaunchJDialog);
      panel.add(addDeptButtonLaunchJFrame);

      frame.add(panel);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);

   }
}

class LaunchJDialogListener implements ActionListener {
   JDialog dialog;

   public LaunchJDialogListener(JFrame parentFrame) {
      JButton doneButton = new JButton(new AbstractAction("Done") {
         public void actionPerformed(ActionEvent e) {
            dialog.dispose();
         }
      });

      JPanel panel = new JPanel();
      panel.setPreferredSize(new Dimension(100, 100));
      panel.add(doneButton);

      dialog = new JDialog(parentFrame, "Dialog", true);
      dialog.add(panel);
      dialog.pack();
      dialog.setLocationRelativeTo(null);
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      System.out.println("called before setting dialog visible");
      dialog.setVisible(true);
      System.out
            .println("called after setting dialog visible. Note that this line doesn't show until the dialog disappears");
   }
}

class LaunchJFrameListener implements ActionListener {
   JFrame frame;

   public LaunchJFrameListener() {
      JButton doneButton = new JButton(new AbstractAction("Done") {
         public void actionPerformed(ActionEvent e) {
            frame.dispose();
         }
      });

      JPanel panel = new JPanel();
      panel.setPreferredSize(new Dimension(100, 100));
      panel.add(doneButton);

      frame = new JFrame("JFrame");
      frame.add(panel);
      frame.pack();
      frame.setLocationRelativeTo(null);
   }

   @Override
   public void actionPerformed(ActionEvent e) {
      System.out.println("called before setting frame visible");
      frame.setVisible(true);
      System.out
            .println("called after setting frame visible.  Note that this line shows up immediately.");
   }
}