java - Switch 语句没有正确递增

标签 java image events button

我有一个名为 nextAd 的按钮,每次单击它时应该显示一组不同的图像,但当我单击它时什么也没有出现。

问题:为什么我的 switch 语句没有导致显示不同的图像?

最好不使用数组

  public class AdvertisementPanel extends JPanel {

        Advertisement apple = new Advertisement("Apple", new ImageIcon("./src/AppleAdvertisement.jpg"), new ImageIcon ("./src/AppleLogo.jpg"));
        Advertisement IBM = new Advertisement("IBM", new ImageIcon("./src/IBMAdvertisement.jpg"), new ImageIcon ("./src/IBMLogo.jpg"));
        Advertisement microsoft = new Advertisement("Microsoft", new ImageIcon("./src/MicrosoftAdvertisement.jpg"), new ImageIcon ("./src/MicrosoftLogo.jpg"));
        Advertisement samsung = new Advertisement("Samsung", new ImageIcon("./src/SamsungAdvertisement.jpg"), new ImageIcon ("./src/SamsungLogo.jpg"));

        JLabel appleTitle = new JLabel(apple.getTitle());
        JLabel IBMTitle = new JLabel(IBM.getTitle());
        JLabel microsoftTitle = new JLabel(microsoft.getTitle());
        JLabel samsungTitle = new JLabel(samsung.getTitle());

        JLabel appleAdPic = new JLabel(apple.getPicture1());
        JLabel IBMAdPic = new JLabel(IBM.getPicture1());
        JLabel microsoftAdPic = new JLabel(microsoft.getPicture1());
        JLabel samsungAdPic = new JLabel(samsung.getPicture1());

        JLabel appleLogo = new JLabel(apple.getPicture2());
        JLabel IBMLogo = new JLabel(IBM.getPicture2());
        JLabel microsoftLogo = new JLabel(microsoft.getPicture2());
        JLabel samsungLogo = new JLabel(samsung.getPicture2());

        JButton nextAd = new JButton("Click for the next advertisement");

        public AdvertisementPanel() 
        {

            //set up panel
            setPreferredSize(new Dimension(1200,1000));
            setBackground(Color.gray);

            //adds action listener to button
            nextAd.addActionListener(new buttonListener());

            //for Apple
            add(appleTitle);
            add(appleAdPic);
            add(appleLogo);

            //for IBM
            add(IBMTitle);
            add(IBMAdPic);
            add(IBMLogo);
            IBMTitle.setVisible(false);
            IBMAdPic.setVisible(false);
            IBMLogo.setVisible(false);

            //for Microsoft
            add(microsoftTitle);
            add(microsoftAdPic);
            add(microsoftLogo);
            microsoftTitle.setVisible(false);
            microsoftAdPic.setVisible(false);
            microsoftLogo.setVisible(false);

            //for Samsung
            add(samsungTitle);
            add(samsungAdPic);
            add(samsungLogo);
            samsungTitle.setVisible(false);
            samsungAdPic.setVisible(false);
            samsungLogo.setVisible(false);

            //for Button
            add(nextAd);

        private class buttonListener implements ActionListener

        {
            private int i = 0;

            @Override
            public void actionPerformed(ActionEvent e) 
            {
            if(e.getSource() == nextAd);    
            {
                i++;    
            }
            switch (i){

            case '1': {
                appleTitle.setVisible(false);
                appleAdPic.setVisible(false);
                appleLogo.setVisible(false);
                IBMTitle.setVisible(true);
                IBMAdPic.setVisible(true);
                IBMLogo.setVisible(true);
                break;
            }
            case '2':{
                IBMAdPic.setVisible(false);
                IBMLogo.setVisible(false);
                microsoftAdPic.setVisible(true);
                microsoftLogo.setVisible(true);
                break;
            }
            case '3':{

                microsoftAdPic.setVisible(false);
                microsoftLogo.setVisible(false);
                samsungAdPic.setVisible(true);
                samsungLogo.setVisible(true);
                break;
            }
    }

最佳答案

  1. case '1': 您正在与 char(文字 ASCII 字符 1)进行比较,而不是数字。 1 在 ASCII 中是 49,所以你并没有真正与你认为的自己进行比较。

  2. case foo: 后面的大括号是不必要的。 break 语句实际上是打破了 block ,而不是打破了 case,因此您应该删除 {}

  3. 您在点击监听器内部设置了 private int = 0,因此它始终设置为 0,然后递增到 1,这不会执行任何操作。您需要在监听器外部声明它。

关于java - Switch 语句没有正确递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26900852/

相关文章:

c - C语言读取并显示灰度图像。

php - 使用 PHP 或 Javascript 裁剪图像

javascript - 如何找出点击事件在哪里被捕获?

c# - 如何在网络连接时以及用户登录时接收事件

java - 短路和一元运算符的工作

Java:如何检查 2 个二进制文件是否相同?

Java核心: returning null as boolean

java - 将 Spring Boot 连接到 MongoLab 的 MongoDB 版本 3.0.7 时出现问题

c - 使用 leptonica 查找区域的边界框

c# - 事件与可重写的方法?