Как запретить Java выполнять весь код без ожидания ввода от пользователя - PullRequest
2 голосов
/ 15 октября 2011

Я довольно новичок в Java и просто ищу небольшую помощь.
Я пытаюсь создать программу, которая позволит пользователю вводить в качестве графического интерфейса имя и>> местоположение универмага. Это позволяет, но программа не ждет ввода> деталей, она просто инициализирует класс 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 Ответ

5 голосов
/ 15 октября 2011

У вас не должно быть JFrame, запускающего другие JFrames, особенно если вы хотите, чтобы дочерние окна вели себя как модальные диалоги - диалог, который останавливает код в окне запуска, пока он не будет полностью обработан. В этом случае сделайте диалоговые окна dialogs , используя модальные 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.");
   }
}
...