2017-01-13 4 views
0

J'essaye de créer des JButtons en utilisant un JMenuItem. J'ai un nouvel employé JMenuItem qui, lorsqu'il est cliqué, ouvre un cadre avec quatre JTextFields: nom de l'employé, numéro d'identification de l'employé, taux de rémunération des employés et heures de travail des employés, et un JButton, Apply. Une fois que l'utilisateur a entré les données dans JTextFields et qu'il a tapé sur Apply JButton, la fenêtre principale est censée ajouter un JButton avec les données entrées.Comment créer des JButtons en utilisant JMenuItem et ActionListener

Voici le code pour l'affichage du programme

public ProgramDisplay() { 

     setTitle("Fluid Accounts"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     setLayout(new GridLayout(5, 5)); 
     account = new JButton("<html>" + "Samuel Tayman" + "<br>" + "Wages: " + findPay(hours, payRate)); 
     add(account); 
     account = new JButton("<html>" + "Janice" + "<br>" + "Wages: " + findPay(hours, payRate)); 
     add(account); 

     buildMenuBar(); 
     pack(); 
     setVisible(true); 

    } 

Et voici le code pour le nouvel employé JMenuItem avec le ActionListener:

private void buildEmployeeMenu() 

{ 

    newEmployee = new JMenuItem("New Employee"); 
    newEmployee.addActionListener(new NewListener()); 
    employeeMenu = new JMenu("Employees"); 
    employeeMenu.add(newEmployee); 

} 

/** 
* Private inner class that handles the event that is generated when the 
* user selects New from the file menu. 
*/ 

private class NewListener extends JFrame implements ActionListener { 
    /** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

    public void actionPerformed(ActionEvent e) { 

     name = ""; 
     employeeID = ""; 
     rateOfPay = ""; 
     hoursWorked = ""; 
     JButton Apply = new JButton("Apply"); 

     Apply.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       name = nameField.getText(); 
       employeeID = IDField.getText(); 
       rateOfPay = payRateField.getText(); 
       hoursWorked = hoursField.getText(); 
       setVisible(false); 
      } 
     }); 
     setLayout(new GridLayout(4, 4)); 
     add(nameField = new JTextField("Enter the Employee Name")); 
     add(IDField = new JTextField("Enter the Employee's ID Number")); 
     add(payRateField = new JTextField("Enter the Employee's Pay Rate")); 
     add(hoursField = new JTextField("Enter the Employee's Hours Worked")); 
     add(Apply); 

     pack(); 
     setVisible(true); 

    } 

} 

Example of current running program

Je l'ai fait de sorte que les données stockées dans les composants textField sont enregistrées dans les champs, mais je n'ai pas réussi à créer e a JButton dans la fenêtre principale du programme en utilisant le bouton Appliquer.

Toute aide et assistance est appréciée!

+0

votre programme JFrame d'affichage devez savoir sur le texte à l'intérieur des champs JText dans le NewListener sinon il ne sera pas en mesure de extraire le texte nouvellement entré. –

+0

Une fois que l'affichage du programme connaît le nom, employeeID ect. sont, vous devrez saisir le bouton en question, puis modifier les attributs du bouton en fonction du nom, employeeID ect. –

Répondre

0

Implémentez une méthode pour ajouter un JButton dans la classe ProgramDisplay, par ex. Passer l'instance ProgramDisplay en tant que paramètre final à NewListener, e. g.

private class NewListener extends JFrame implements ActionListener { 
    final ProgramDisplay pd; 
    NewListener(ProgramDisplay pd) { 
      this.pd = pd; 
    } 
..... 

et appeler la méthode addButton à partir de votre méthode ActionPerformed:

Apply.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      name = nameField.getText(); 
      employeeID = IDField.getText(); 
      rateOfPay = payRateField.getText(); 
      hoursWorked = hoursField.getText(); 
      setVisible(false); 
      NewListener.this.pd.addButton(name, employeeID, rateOfPay, hoursWorked); 
     } 
    }); 
+0

Merci pour ça! Je n'ai pas pensé à faire une autre méthode pour cela, j'ai continué à travailler sur ActionListener du bouton Apply à la place. Après quelques petites modifications pour s'adapter au reste du code, les boutons sont ajoutés avec succès aux données entrées. Courir à travers quelques problèmes de plus, mais je crois que suffisamment de recherches avec essais et erreurs aideront à me trouver où je dois être. J'apprécie l'aide! –