繁体   English   中英

ActionListener没有响应?

[英]ActionListener not responding?

我对Java代码非常陌生,但是在其他任何地方都找不到解决问题的答案。 我有一个带有11个JButton的JFrame,每个JButton都称为.addActionListener(this);。 方法。 前三个和最后一个像预期的那样响应,但是,JButtons buy4-buy10不会触发ActionEvent。 我已多次阅读代码以消除错别字,并且Eclipse没有显示任何错误,但是按钮仍然无法正常工作。

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;

public class MoneyMaker implements ActionListener {

    static JButton exit = new JButton("Exit");
    static JButton exitShop = new JButton("Exit Shop");
    static JButton buy2 = new JButton("Buy Newspapers - $40");
    static JButton buy3 = new JButton("Buy Car Wash - $250");
    static JButton buy4 = new JButton("Buy Donut Shop - $500");
    static JButton buy5 = new JButton("Buy Pizza Store - $800");
    static JButton buy6 = new JButton("Buy Furniture Store - $1000");
    static JButton buy7 = new JButton("Buy Car Dealer - $2500");
    static JButton buy8 = new JButton("Buy Whole Foods Market - $15000");
    static JButton buy9 = new JButton("Buy Silicon Valley - $50000");
    static JButton buy10 = new JButton("Buy Oil & Gas Company - $1000000");
    static int moneyint = 1;
    static JLabel moneyLabel = new JLabel("You have: $" + moneyint);
    static String itemBeingSold = "lemonade";
    static JButton sellItems = new JButton("Sell Items");
    static JButton openShop = new JButton("Upgrade Merchandise");
    static JLabel sellLabel = new JLabel("Currently selling: " + itemBeingSold);
    static JFrame ClickerFrame = new JFrame("MoneyMaker TM - How Rich Can You Get?");

    {
        ClickerFrame.setLayout(new FlowLayout());
        ClickerFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        ClickerFrame.setSize(475, 150);
        ClickerFrame.setLocation(500, 100);
        ClickerFrame.add(moneyLabel);
        ClickerFrame.add(sellLabel);
        ClickerFrame.add(sellItems);
        sellItems.addActionListener(this);
        ClickerFrame.add(openShop);
        openShop.addActionListener(this);
        ClickerFrame.add(exit);
        exit.addActionListener(this);
        ClickerFrame.setResizable(false);
        ClickerFrame.setVisible(false);
    }
    static JFrame shopFrame = new JFrame("The Shop TM - What Can You Buy?");

    {
        shopFrame.setLayout(new FlowLayout());
        shopFrame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
        shopFrame.setSize(400, 250);
        shopFrame.setLocation(500, 100);
        shopFrame.setAlwaysOnTop(true);
        shopFrame.add(buy2);
        buy2.addActionListener(this);
        shopFrame.add(buy3);
        buy3.addActionListener(this);
        shopFrame.add(buy4);
        buy4.addActionListener(this);
        shopFrame.add(buy5);
        buy5.addActionListener(this);
        shopFrame.add(buy6);
        buy6.addActionListener(this);
        shopFrame.add(buy7);
        buy7.addActionListener(this);
        shopFrame.add(buy8);
        buy8.addActionListener(this);
        shopFrame.add(buy9);
        buy9.addActionListener(this);
        shopFrame.add(buy10);
        buy10.addActionListener(this);
        shopFrame.add(exitShop);
        exitShop.addActionListener(this);
        shopFrame.setResizable(false);
        shopFrame.setVisible(false);
    }

    public static void main(String[] args) {
        new MoneyMaker();
    }

    public MoneyMaker() {
        ClickerFrame.setVisible(true);
    }

    public void actionPerformed(ActionEvent arg0) {
        Object control = arg0.getSource();
        if (control == sellItems) {
            MoneyMakerClass.sell();
            moneyLabel.setText("You have: $" + moneyint);
        }
        if (control == openShop) {
            if (itemBeingSold.equals(MoneyMakerClass.item1)) {
            } else if (itemBeingSold.equals(MoneyMakerClass.item2)) {
                buy2.setEnabled(false);
            } else if (itemBeingSold.equals(MoneyMakerClass.item3)) {
                buy2.setEnabled(false);
                buy3.setEnabled(false);
            } else if (itemBeingSold.equals(MoneyMakerClass.item4)) {
                buy2.setEnabled(false);
                buy3.setEnabled(false);
                buy4.setEnabled(false);
            } else if (itemBeingSold.equals(MoneyMakerClass.item5)) {
                buy2.setEnabled(false);
                buy3.setEnabled(false);
                buy4.setEnabled(false);
                buy5.setEnabled(false);
            } else if (itemBeingSold.equals(MoneyMakerClass.item6)) {
                buy2.setEnabled(false);
                buy3.setEnabled(false);
                buy4.setEnabled(false);
                buy5.setEnabled(false);
                buy6.setEnabled(false);
            } else if (itemBeingSold.equals(MoneyMakerClass.item7)) {
                buy2.setEnabled(false);
                buy3.setEnabled(false);
                buy4.setEnabled(false);
                buy5.setEnabled(false);
                buy6.setEnabled(false);
                buy7.setEnabled(false);
            } else if (itemBeingSold.equals(MoneyMakerClass.item8)) {
                buy2.setEnabled(false);
                buy3.setEnabled(false);
                buy4.setEnabled(false);
                buy5.setEnabled(false);
                buy6.setEnabled(false);
                buy7.setEnabled(false);
                buy8.setEnabled(false);
            } else if (itemBeingSold.equals(MoneyMakerClass.item9)) {
                buy2.setEnabled(false);
                buy3.setEnabled(false);
                buy4.setEnabled(false);
                buy5.setEnabled(false);
                buy6.setEnabled(false);
                buy7.setEnabled(false);
                buy8.setEnabled(false);
                buy9.setEnabled(false);
            } else if (itemBeingSold.equals(MoneyMakerClass.item10)) {
                buy2.setEnabled(false);
                buy3.setEnabled(false);
                buy4.setEnabled(false);
                buy5.setEnabled(false);
                buy6.setEnabled(false);
                buy7.setEnabled(false);
                buy8.setEnabled(false);
                buy9.setEnabled(false);
                buy10.setEnabled(false);
            }
            shopFrame.setVisible(true);
        }
        if (control == exit) {
            System.exit(0);
        }
        if (control == exitShop) {
            shopFrame.setVisible(false);
        }
        if (control == buy2) {
            if (moneyint >= 40) {
                moneyint = moneyint - 40;
                itemBeingSold = "newspaper";
                buy2.setEnabled(false);
                JOptionPane.showMessageDialog(shopFrame, "You purchased newspapers!");
                sellLabel.setText("Currently selling: " + itemBeingSold);
                moneyLabel.setText("You have: $" + moneyint);
                shopFrame.setVisible(false);
            } else {
                JOptionPane.showMessageDialog(shopFrame, "Not enough money!");
            }
        }
        if (control == buy3) {
            if (moneyint >= 250) {
                moneyint = moneyint - 250;
                itemBeingSold = "car washes";
                buy3.setEnabled(false);
                JOptionPane.showMessageDialog(shopFrame, "You purchased a car wash!");
                sellLabel.setText("Currently selling: " + itemBeingSold);
                moneyLabel.setText("You have: $" + moneyint);
                shopFrame.setVisible(false);
            } else {
                JOptionPane.showMessageDialog(shopFrame, "Not enough money!");
            }
        }
        if (control == buy4) {
            if (moneyint >= 500) {
                moneyint = moneyint - 500;
                itemBeingSold = "donuts";
                buy4.setEnabled(false);
                JOptionPane.showMessageDialog(shopFrame, "You purchased a donut shop!");
                sellLabel.setText("Currently selling: " + itemBeingSold);
                moneyLabel.setText("You have: $" + moneyint);
                shopFrame.setVisible(false);
            } else {
                JOptionPane.showMessageDialog(shopFrame, "Not enough money!");
            }
            if (control == buy5) {
                if (moneyint >= 800) {
                    moneyint = moneyint - 800;
                    itemBeingSold = "pizza";
                    buy5.setEnabled(false);
                    JOptionPane.showMessageDialog(shopFrame, "You purchased a pizzeria!");
                    sellLabel.setText("Currently selling: " + itemBeingSold);
                    moneyLabel.setText("You have: $" + moneyint);
                    shopFrame.setVisible(false);
                } else {
                    JOptionPane.showMessageDialog(shopFrame, "Not enough money!");
                }
            }
            if (control == buy6) {
                if (moneyint >= 1000) {
                    moneyint = moneyint - 1000;
                    itemBeingSold = "furniture";
                    buy6.setEnabled(false);
                    JOptionPane.showMessageDialog(shopFrame, "You purchased a furniture store!");
                    sellLabel.setText("Currently selling: " + itemBeingSold);
                    moneyLabel.setText("You have: $" + moneyint);
                    shopFrame.setVisible(false);
                } else {
                    JOptionPane.showMessageDialog(shopFrame, "Not enough money!");
                }
            }
            if (control == buy7) {
                if (moneyint >= 40) {
                    moneyint = moneyint - 2500;
                    itemBeingSold = "cars";
                    buy7.setEnabled(false);
                    JOptionPane.showMessageDialog(shopFrame, "You purchased a car dealer!");
                    sellLabel.setText("Currently selling: " + itemBeingSold);
                    moneyLabel.setText("You have: $" + moneyint);
                    shopFrame.setVisible(false);
                } else {
                    JOptionPane.showMessageDialog(shopFrame, "Not enough money!");
                }
            }
            if (control == buy8) {
                if (moneyint >= 15000) {
                    moneyint = moneyint - 15000;
                    itemBeingSold = "organic foods";
                    buy8.setEnabled(false);
                    JOptionPane.showMessageDialog(shopFrame, "You purchased Whole Foods Market!");
                    sellLabel.setText("Currently selling: " + itemBeingSold);
                    moneyLabel.setText("You have: $" + moneyint);
                    shopFrame.setVisible(false);
                } else {
                    JOptionPane.showMessageDialog(shopFrame, "Not enough money!");
                }
            }
            if (control == buy9) {
                if (moneyint >= 50000) {
                    moneyint = moneyint - 50000;
                    itemBeingSold = "cyber electronics";
                    buy9.setEnabled(false);
                    JOptionPane.showMessageDialog(shopFrame, "You purchased Silicon Valley!");
                    sellLabel.setText("Currently selling: " + itemBeingSold);
                    moneyLabel.setText("You have: $" + moneyint);
                    shopFrame.setVisible(false);
                } else {
                    JOptionPane.showMessageDialog(shopFrame, "Not enough money!");
                }
            }
            if (control == buy10) {
                if (moneyint >= 1000000) {
                    moneyint = moneyint - 1000000;
                    itemBeingSold = "oil & gas";
                    buy10.setEnabled(false);
                    JOptionPane.showMessageDialog(shopFrame, "You purchased an oil & gas company!");
                    sellLabel.setText("Currently selling: " + itemBeingSold);
                    moneyLabel.setText("You have: $" + moneyint);
                    shopFrame.setVisible(false);
                } else {
                    JOptionPane.showMessageDialog(shopFrame, "Not enough money!");
                }
            }
        }
    }
}

一类:

public class MoneyMakerClass {

    static String item1 = "lemonade";
    static String item2 = "newspaper";
    static String item3 = "car washes";
    static String item4 = "donuts";
    static String item5 = "pizza";
    static String item6 = "furniture";
    static String item7 = "cars";
    static String item8 = "organic foods";
    static String item9 = "cyber electronics";
    static String item10 = "oil & gas";

    public static void sell() {
        if (MoneyMaker.itemBeingSold.equals(item1)) {
            MoneyMaker.moneyint = MoneyMaker.moneyint + 1;
        } else if (MoneyMaker.itemBeingSold.equals(item2)) {
            MoneyMaker.moneyint = MoneyMaker.moneyint + 10;
        } else if (MoneyMaker.itemBeingSold.equals(item3)) {
            MoneyMaker.moneyint = MoneyMaker.moneyint + 25;
        } else if (MoneyMaker.itemBeingSold.equals(item4)) {
            MoneyMaker.moneyint = MoneyMaker.moneyint + 40;
        } else if (MoneyMaker.itemBeingSold.equals(item5)) {
            MoneyMaker.moneyint = MoneyMaker.moneyint + 65;
        } else if (MoneyMaker.itemBeingSold.equals(item6)) {
            MoneyMaker.moneyint = MoneyMaker.moneyint + 100;
        } else if (MoneyMaker.itemBeingSold.equals(item7)) {
            MoneyMaker.moneyint = MoneyMaker.moneyint + 550;
        } else if (MoneyMaker.itemBeingSold.equals(item8)) {
            MoneyMaker.moneyint = MoneyMaker.moneyint + 1000;
        } else if (MoneyMaker.itemBeingSold.equals(item9)) {
            MoneyMaker.moneyint = MoneyMaker.moneyint + 10000;
        } else if (MoneyMaker.itemBeingSold.equals(item10)) {
            MoneyMaker.moneyint = MoneyMaker.moneyint + 100000;
        }
    }
}

任何帮助将不胜感激!

问题是你

if (control == buy4) {
...
}

错过了右括号。 所以你实际拥有的是

if ( control == buy1 ){
 ...
}
...
if ( control == buy4 ){
  if ( control == buy5 ){
   ...
  }
  if ( control == buy6 ){
   ...
  }
}

正确关闭if将解决问题。

除此之外:

  • 您正在使用太多的静态变量。 没有必要
  • 为什么不在构造函数中而不是在{}块中移动创建代码
  • 您应该包装new MoneyMaker(); SwingUtilities#invokeLater或类似方法中的main方法中调用(请参见Swing教程中的并发性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM