新人求助JButton的setDisabledIcon()怎么用?

alazyperson 2019-07-12 08:12:43
运行下面的这个代码不显示图片是怎么回事


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);
button.setBounds(50, 50, 23, 23);
jf.add(button);
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);
}
}
...全文
387 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39936465 2019-07-22
  • 打赏
  • 举报
回复
引用 9 楼 alazyperson 的回复:
谢谢,问题解决了,请问可以解释一下原理吗?


这个可能跟当初的该方法设定有关,如果没有设置普通图标,普通图标为null就出问题了。
alazyperson 2019-07-20
  • 打赏
  • 举报
回复
引用 8 楼 qq_39936465的回复:
还有个问题,如果你图片路径不对也不会显示。 [quote=引用 7 楼 alazyperson 的回复:] update不行的话试试用repaint()
还是不行啊。。。是我原来的代码有问题吗?[/quote] 要设置禁用icon必须要设置普通的icon 不然没用,下面是测试成功程序

public class Demo {
	private static JButton button = new JButton();
	private static Image bomb1 = Toolkit.getDefaultToolkit().getImage("src/images/logo1.jpg");
	private static Image bomb2 = Toolkit.getDefaultToolkit().getImage("src/images/logo2.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);
		
		button.setBounds(50, 50, 80, 30);
		button.setIcon(new ImageIcon(bomb1));

		button.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				button.setEnabled(false);
				button.setDisabledIcon(new ImageIcon(bomb2));
				button.updateUI();

			}
		});
		jf.add(button);
		jf.setVisible(true);
	}
}
[/quote] 谢谢,问题解决了,请问可以解释一下原理吗?
qq_39936465 2019-07-16
  • 打赏
  • 举报
回复
还有个问题,如果你图片路径不对也不会显示。
引用 7 楼 alazyperson 的回复:
update不行的话试试用repaint()
还是不行啊。。。是我原来的代码有问题吗?[/quote] 要设置禁用icon必须要设置普通的icon 不然没用,下面是测试成功程序

public class Demo {
	private static JButton button = new JButton();
	private static Image bomb1 = Toolkit.getDefaultToolkit().getImage("src/images/logo1.jpg");
	private static Image bomb2 = Toolkit.getDefaultToolkit().getImage("src/images/logo2.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);
		
		button.setBounds(50, 50, 80, 30);
		button.setIcon(new ImageIcon(bomb1));

		button.addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				button.setEnabled(false);
				button.setDisabledIcon(new ImageIcon(bomb2));
				button.updateUI();

			}
		});
		jf.add(button);
		jf.setVisible(true);
	}
}
alazyperson 2019-07-15
  • 打赏
  • 举报
回复
引用 6 楼 qq_39936465的回复:
[quote=引用 5 楼 alazyperson 的回复:] 用了setEnable,但是不显示啊
update不行的话试试用repaint()[/quote] 还是不行啊。。。是我原来的代码有问题吗?
qq_39936465 2019-07-15
  • 打赏
  • 举报
回复
引用 5 楼 alazyperson 的回复:
用了setEnable,但是不显示啊
update不行的话试试用repaint()
alazyperson 2019-07-15
  • 打赏
  • 举报
回复
引用 4 楼 qq_39936465的回复:
[quote=引用 3 楼 alazyperson 的回复:] 这样没有用啊,还是不显示图片,这个方法对图片有什么限制吗? 另外,如果把button.setDisabledIcon(...)改为button.setIcon(...),那么当button的事件监听器响应后会显示图片,而原先的代码(指button.setDisabledIcon(...))运行后不会显示,这是怎么回事?
其实setdisableicon 设置botton禁用时的图标,seticon是设置普通图标。 你可能还要加句 botton.setEnable(false); 禁用图标才会显示。[/quote] 用了setEnable,但是不显示啊
qq_39936465 2019-07-15
  • 打赏
  • 举报
回复
引用 3 楼 alazyperson 的回复:
这样没有用啊,还是不显示图片,这个方法对图片有什么限制吗? 另外,如果把button.setDisabledIcon(...)改为button.setIcon(...),那么当button的事件监听器响应后会显示图片,而原先的代码(指button.setDisabledIcon(...))运行后不会显示,这是怎么回事?
其实setdisableicon 设置botton禁用时的图标,seticon是设置普通图标。 你可能还要加句 botton.setEnable(false); 禁用图标才会显示。
alazyperson 2019-07-15
  • 打赏
  • 举报
回复
引用 2 楼 qq_39936465 的回复:
可能需要组件更新,试试在按键事件最后加入 button.updateUI();
这样没有用啊,还是不显示图片,这个方法对图片有什么限制吗? 另外,如果把button.setDisabledIcon(...)改为button.setIcon(...),那么当button的事件监听器响应后会显示图片,而原先的代码(指button.setDisabledIcon(...))运行后不会显示,这是怎么回事?
qq_39936465 2019-07-15
  • 打赏
  • 举报
回复
引用 楼主 alazyperson 的回复:
运行下面的这个代码不显示图片是怎么回事 [/code]
可能需要组件更新,试试在按键事件最后加入 button.updateUI();
大星King 2019-07-14
  • 打赏
  • 举报
回复
import javax.swing.*;

public class Demo extends JFrame{
// 定义组件
private JPanel jpl;
private JLabel bg;

public Demo(){
// 选择图片文件
bg = new JLabel(new ImageIcon("测试/src/image/1.jpg"));
// 初始化
jpl = new JPanel();
jpl = new JPanel();
jpl.add(bg);

this.add(jpl);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出关闭JFrame
this.setSize(400, 300);//设置窗口大小
this.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)
this.setVisible(true);
}

public static void main(String[] args) {
// TODO Auto-generated method stub
new Demo();
}
}

你可以参考一下我的代码,我用的Idea,如果你用的是eclipse的话文件路径要改一下

62,625

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧