2015-02-18 3 views
0
import java.awt.Graphics; 
import javax.swing.JApplet; 
import javax.swing.JOptionPane; 
import java.awt.*; 
import javax.swing.*; 
import java.applet.*; 
import java.awt.event.*; 

public class JustinSodaMachine extends JApplet 
{ 
    private JButton coke; 
    private JButton dietCoke; 
    private JButton mellowYellow; 
    private JButton water; 
    private JButton cherryCoke; 
    private Panel aPanel; 
    private Panel bPanel; 
    private Panel cPanel; 
    private int cokeNum = 0; 
    private int dietCokeNum = 0; 
    private int mellowYellowNum = 0; 
    private int waterNum = 0; 
    private int cherryCokeNum = 0; 
    private double amount; 
    private double change; 


    private JTextField amountIn; 

    public void init() 
    { 
     setLayout(new BorderLayout()); 
     buildAPanel(); 
     buildBPanel(); 
     buildCPanel(); 
     add(aPanel,BorderLayout.CENTER); 
     add(bPanel,BorderLayout.NORTH); 
     add(cPanel,BorderLayout.SOUTH); 


     } 

    private void buildAPanel() 
    { 

     aPanel = new Panel(); 
     Button coke = new Button("Coke"); 
     Button dietCoke = new Button("Diet Coke"); 
     Button mellowYellow = new Button("Mellow Yellow"); 
     Button water = new Button("Water"); 
     Button cherryCoke = new Button("Cherry Coke"); 
     aPanel.setLayout(new GridLayout(5, 1, 10, 40)); 

     coke.addActionListener(new ButtonHandler()); 
     dietCoke.addActionListener(new ButtonHandler()); 
     mellowYellow.addActionListener(new ButtonHandler()); 
     water.addActionListener(new ButtonHandler()); 
     cherryCoke.addActionListener(new ButtonHandler()); 

     aPanel.add(coke); 
     aPanel.add(dietCoke); 
     aPanel.add(mellowYellow); 
     aPanel.add(water); 
     aPanel.add(cherryCoke); 
     setVisible(true); 

    } 


    private void buildBPanel() 
    { 
     bPanel = new Panel(); 
     JLabel title = new JLabel("Justin's Soda Machine Drinks 0.75 Cent"); 
     bPanel.add(title); 
     setVisible(true); 
    } 

    private void buildCPanel() 
    { 
     cPanel = new Panel(); 
     JLabel amountText = new JLabel("Amount deposited: "); 
     amountIn = new JTextField(10); 
     amountIn.setText("0"); 
     amountIn.setEditable(true); 


     cPanel.add(amountText); 
     cPanel.add(amountIn); 
     setVisible(true); 
    } 



private class ButtonHandler implements ActionListener 
{ 
     public void actionPerformed(ActionEvent e) 
     { 


     double balance = Double.parseDouble(amountIn.getText()); 

     if(balance < 0.75) 
     JOptionPane.showMessageDialog(null, "Inadequate amount of money "); 

     else 
     { 

      if(e.getSource() == coke) 
      { 
       cokeNum++; 
       if(cokeNum <= 20) 
       { 
        balance = (amount - 0.75); 
        JOptionPane.showMessageDialog(null, "The balance is : " + balance + " You selected Cola"); 
       } 
       else 
        JOptionPane.showMessageDialog(null, "Out of range "); 
      } 

      if(e.getSource() == dietCoke) 
      { 
       dietCokeNum++; 
       if(dietCokeNum <= 20) 
       { 
        balance = (amount - 0.75); 
        JOptionPane.showMessageDialog(null, "The balance is : " + balance + " You selected Lemon-line soda"); 
       } 
       else JOptionPane.showMessageDialog(null, "Out of range "); 
      } 

      if(e.getSource() == mellowYellow) 
      { 
       mellowYellowNum++; 
       if(mellowYellowNum <= 20) 
       { 
        balance = (amount - 0.75); 
        JOptionPane.showMessageDialog(null, "The balance is : " + balance + " You selected Grape soda"); 
       } 
       else JOptionPane.showMessageDialog(null, "Out of range "); 
      } 

      if(e.getSource() == water) 
      { 
       waterNum++; 
       if(waterNum <= 20) 
       { 
        balance = (amount - 0.75); 
        JOptionPane.showMessageDialog(null, "The balance is : " + balance + " You selected Dirnk Root beer"); 
       } 
       else JOptionPane.showMessageDialog(null, "Out of range "); 
      } 


      if(e.getSource() == cherryCoke) 
      { 
       cherryCokeNum++; 
       if(cherryCokeNum <= 20) 
       { 
        balance = (amount - 0.75); 
        JOptionPane.showMessageDialog(null, "The balance is : " + balance + " You selected bottle of water"); 
       } 
       else JOptionPane.showMessageDialog(null, "Out of range "); 
      } 
      amountIn.setText(""+balance); 
     } 

     } 
    } 
} 

Я пробовал все, что я могу придумать, чтобы заставить кнопки работать в этом торговом автомате, чтобы распознать выбор напитков и вычесть 0,75 цента от общего депозита. Я не знаю, почему это не работает, и любая помощь приветствуется. Он отлично подходит для jgrasp без ошибок и исключений.Java: JButtons, не работающий с действием. Слушатель

ответ

3

У вас есть две коксовые кнопки (private JButton coke; в качестве переменной класса и Button coke = new Button("Coke"); в качестве локальной переменной внутри buildAPanel().

От быстрого сканирования, это выглядит, как вы вызываете coke.addActionListener(new ButtonHandler()); который добавляет слушателя к местного (не класс) переменной. Это также кнопка вы добавляете к панели. Это будет иметь важное значение в секунду.

Внутри вашего actionPerformed (...) вы смотрите на класса JButton имени кокса , а не тот, который добавлен к панели - if(e.getSource() == coke)

Удалите кнопки внутри buildAPanel(), и это должно заставить вас двигаться.

+0

Я пока не могу дать вам верх, но теперь он работает. Огромное спасибо. – Justin

+2

Но вы могли бы принять его ответ ... – keuleJ

+1

Кроме того, op смешивает тяжелые и легкие весы, которые будут генерировать проблемы с живописью – MadProgrammer

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