alazyperson 2019-07-15 16:30 采纳率: 0%
浏览 376

JButton类中的setDisabledIcon()方法无法显示设置的图片,为什么?

以下是我的代码:

import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;

public class Demo {
    private static JButton button=new JButton();
    private static Image bomb=Toolkit.getDefaultToolkit().getImage("src/image/1.jpg");

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //初始化窗体
        JFrame jf=new JFrame();
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setBounds(200, 200, 200, 200);
        jf.setLayout(null);
        //添加按钮
        jf.add(button);
        button.setBounds(50, 50, 23, 23);
        //添加事件监听器
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                button.setEnabled(false);
                button.setDisabledIcon(new ImageIcon(bomb));
            }
        });
        jf.setVisible(true);
    }
}

结果当button的事件监听器相应后却不显示设置的bomb图片,但是如果把button.setDisabledIcon(...)改为button.setIcon(...)则可以显示bomb的灰度图片。这是怎么回事,求解。

  • 写回答

1条回答 默认 最新

  • 明初啥都能学会 2024-04-20 10:08
    关注

    问题出在您的代码中使用了 Toolkit.getDefaultToolkit().getImage() 方法来加载图片。这个方法加载的是普通的图像,而不是 ImageIcon 所需的 Image。因此,即使您成功设置了 DisabledIcon,它也无法正确显示。

    为了解决这个问题,您应该直接使用 ImageIcon 加载图片,并将其传递给 setDisabledIcon() 方法。以下是修改后的代码:

    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    
    public class Demo {
        private static JButton button = new JButton();
        private static ImageIcon bombIcon = new ImageIcon("src/image/1.jpg");
    
        public static void main(String[] args) {
            // 初始化窗体
            JFrame jf = new JFrame();
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jf.setBounds(200, 200, 200, 200);
            jf.setLayout(null);
            // 添加按钮
            jf.add(button);
            button.setBounds(50, 50, 23, 23);
            // 添加事件监听器
            button.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    button.setEnabled(false);
                    button.setDisabledIcon(bombIcon);
                }
            });
            jf.setVisible(true);
        }
    }
    

    在这个修改后的代码中,我直接使用 ImageIcon 加载图片,并将其传递给 setDisabledIcon() 方法,这样就可以正确显示了。

    评论

报告相同问题?

悬赏问题

  • ¥15 安装svn网络有问题怎么办
  • ¥15 Python爬取指定微博话题下的内容,保存为txt
  • ¥15 vue2登录调用后端接口如何实现
  • ¥65 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥15 latex怎么处理论文引理引用参考文献