2010-03-19 3 views
2

s'il vous plaît voir le code de l'interface calculatrice ci-dessous, de mon point de vue des débutants le "1" devrait afficher quand il est pressé, mais évidemment je fais quelque chose de mal. toute suggestiosn s'il vous plaît?actionlistener ne répond pas dans la calculatrice java

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.*; 
import java.awt.event.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 


/** 
*A Class that operates as the framework for a calculator. 
*No calculations are performed in this section 
*/ 
public class CalcFrame extends JPanel 
{ 
    private CalcEngine calc; 

    private JFrame frame; 
    private JTextField display; 
    private JLabel status; 

    /** 
    * Constructor for objects of class GridLayoutExample 
    */ 
    //public CalcFrame(CalcEngine engine) 
    //{ 

     //frame.setVisible(true); 
     // calc = engine; 
     // makeFrame(); 

    //} 
    public CalcFrame() { 
    makeFrame(); 
    calc = new CalcEngine(); 
} 
class ButtonListener implements ActionListener { 
    ButtonListener() { 
    } 

    public void actionPerformed(ActionEvent e) { 
    if (e.getActionCommand().equals("1")) { 
     System.out.println("1"); 
    } 
    } 
} 




    /** 
    * This allows you to quit the calculator. 
    */ 

    // Alows the class to quit. 
    private void quit() 
    { 
     System.exit(0); 


    } 

    // Calls the dialog frame with the information about the project. 
    private void showAbout() 
    { 
     JOptionPane.showMessageDialog(frame, 
        "Declan Hodge and Tony O'Keefe Group Project", 
        "About Calculator Group Project", 
        JOptionPane.INFORMATION_MESSAGE); 
    } 


     // ---- swing stuff to build the frame and all its components ---- 

    /** 
    * The following creates a layout of the calculator frame. 
    */ 
    private void makeFrame() 
    { 
     frame = new JFrame("Group Project Calculator"); 
     makeMenuBar(frame); 

     JPanel contentPane = (JPanel)frame.getContentPane(); 
     contentPane.setLayout(new BorderLayout(8, 8)); 
     contentPane.setBorder(new EmptyBorder(10, 10, 10, 10)); 





     /** 
    * Insert a text field 
    */ 
     display = new JTextField(8); 
     contentPane.add(display, BorderLayout.NORTH); 

     //Container contentPane = frame.getContentPane(); 
     contentPane.setLayout(new GridLayout(4, 5)); 
     JPanel buttonPanel = new JPanel(new GridLayout(4, 4)); 
     contentPane.add(new JButton("9")); 
     contentPane.add(new JButton("8")); 
     contentPane.add(new JButton("7")); 
     contentPane.add(new JButton("6")); 
     contentPane.add(new JButton("5")); 
     contentPane.add(new JButton("4")); 
     contentPane.add(new JButton("3")); 
     contentPane.add(new JButton("2")); 
     contentPane.add(new JButton("1")); 
     contentPane.add(new JButton("0")); 
     contentPane.add(new JButton("+")); 
     contentPane.add(new JButton("-")); 
     contentPane.add(new JButton("/")); 
     contentPane.add(new JButton("*")); 
     contentPane.add(new JButton("=")); 
     contentPane.add(new JButton("C")); 
     contentPane.add(new JButton("CE")); 
     contentPane.add(new JButton("%")); 
     contentPane.add(new JButton("#")); 
     //contentPane.add(buttonPanel, BorderLayout.CENTER); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    /** 
    * Create the main frame's menu bar. 
    * The frame that the menu bar should be added to. 
    */ 










    private void makeMenuBar(JFrame frame) 
    { 
     final int SHORTCUT_MASK = 
      Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); 


     JMenuBar menubar = new JMenuBar(); 
     frame.setJMenuBar(menubar); 

     JMenu menu; 
     JMenuItem item; 

     // create the File menu 
     menu = new JMenu("File"); 
     menubar.add(menu); 






     // create the Quit menu with a shortcut "Q" key. 
     item = new JMenuItem("Quit"); 
      item.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, SHORTCUT_MASK)); 
      item.addActionListener(new ActionListener() { 
           public void actionPerformed(ActionEvent e) { quit(); } 
          }); 
     menu.add(item); 

     // Adds an about menu. 
     menu = new JMenu("About"); 
     menubar.add(menu); 

     // Displays 
     item = new JMenuItem("Calculator Project"); 
      item.addActionListener(new ActionListener() { 
           public void actionPerformed(ActionEvent e) { showAbout(); } 
          }); 
     menu.add(item); 

    } 

} 
+0

ressemble à une copie de cette question http://stackoverflow.com/questions/2470793/simple-2-class-java-calculator-doesnt-accept-inputs-or-do-calculations évidemment à partir du même OP. Le problème est déjà répondu ici. D'ailleurs, cela ressemble à des devoirs, n'est-ce pas? – jfpoilpret

Répondre

3

C'est beaucoup de code!

Vous ne créez pas réellement un ButtonListener et encore moins d'en ajouter un à un bouton.

+0

wow Tom! c'est vraiment utile! – tokee

2

Vous devez enregistrer le programme d'écoute d'action avec le bouton.

//Step 1. 
JButton b1 = new JButton("1"); 

//Step2 register 
b1.addActionListener(new ButtonListener()); 

EDIT

Démarrer en déclarant les boutons comme dans l'étape 1 ci-dessus. Ensuite, dans le panneau de contenu, vous devez ajouter le bouton de la même manière que vous ajoutez les boutons en ce moment.

contentPane.add(b1); 

Maintenant le bouton devrait s'afficher.

+0

merci vincent, le seul problème est quand j'ajoute le code ci-dessus exactement cela ne compile pas de problème mais le bouton ne s'affiche pas? tony – tokee

+0

@tokee Le code que je donne n'est pas complet. Laissez-moi éditer la réponse un peu et fournir un exemple plus complet. –

+0

Merci encore, il se rapproche certainement, mais maintenant quand j'appuie sur "1", il ouvre dans une fenêtre de terminal et ne s'affiche pas sur l'écran de la calculatrice, aucune idée pourquoi ce serait? merci pour votre aide, au cas où ce n'est pas évident déjà je suis nouveau à ce genre de choses. tony – tokee