2010-03-19 2 views
2

см. Ниже код интерфейса калькулятора, с моей точки зрения новичков «1» должен отображаться, когда он нажат, но, очевидно, я делаю что-то неправильно. любые предложения, пожалуйста?actionlistener не отвечает в 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

выглядит как дубликат этого вопроса http://stackoverflow.com/questions/2470793/simple-2-class-java-calculator-doesnt-accept-inputs-or-do-calculations, очевидно, из того же OP. Проблема уже ответила. Кстати, это выглядит как домашнее задание, не так ли? – jfpoilpret

ответ

3

Это код!

Вы фактически не создаете ButtonListener, не говоря уже о том, чтобы добавить один из них.

+0

wow Tom! это действительно полезно! – tokee

2

Вам необходимо зарегистрировать прослушиватель действий с помощью кнопки.

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

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

РЕДАКТИРОВАТЬ

Пуск путем объявления кнопок, как на стадии 1 выше. Затем в области содержимого вам нужно добавить кнопку, аналогичную тому, как вы добавляете кнопки прямо сейчас.

contentPane.add(b1); 

Теперь должна отображаться кнопка.

+0

спасибо vincent, единственная проблема - когда я добавляю код выше, он точно не компилирует, но кнопка не отображается? tony – tokee

+0

@tokee Код, который я даю, не является полным. Позвольте мне немного отредактировать ответ и предоставить более полный пример. –

+0

Еще раз спасибо, он определенно приближается, но теперь, когда я нажимаю «1», он открывается в оконном окне и не отображается на экране калькулятора, любая идея, почему это было бы? спасибо за вашу помощь, если это не очевидно, я новичок в этом. tony – tokee

Смежные вопросы