swing添加按钮监听后,面板监听失效

在swing学习中,发现同时添加面板监听和按钮监听时,面板监听会失效。学习查证后发现是面板无法获得焦点关系。

处理方法:

              1.在setVisible(true)方法前面加setFocusable(true),默认面板为焦点。

              2.在按钮监听方法后添加requestFocus()方法,在每次执行完按钮点击后将面板设为焦点。

代码如下:

package swing;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

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

public class TestGUI {
    
    public static void main(String[] args) {
    	
    	//创建窗口
    	JFrame jf = new JFrame();
    	
    	jf.setSize(400, 300);
        jf.setLocation(580, 200);
    	// 主窗体中的组件设置为绝对定位
    	jf.setLayout(null);
    	
    	final JLabel l = new JLabel();
    	
		ImageIcon i = new ImageIcon("img\\home.png");
		l.setIcon(i);
		l.setBounds(50, 50, i.getIconWidth(), i.getIconHeight());
        
		JButton b = new JButton("隐藏图片");
		b.setBounds(150, 200, 100, 30);
		
		//给按钮增监听
		b.addActionListener(new ActionListener() {
			
			boolean flag = false;			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				l.setVisible(flag);

				if (flag == false)
					b.setText("显示图片");
				if (flag == true)
					b.setText("隐藏图片");

				flag = !flag;

				jf.requestFocus();
			}

		});
				
		jf.addKeyListener(new KeyListener() {

			// 键被弹起
			public void keyReleased(KeyEvent e) {
				System.out.println(e.getKeyCode());
			}

			// 键被按下
			public void keyPressed(KeyEvent e) {
				// TODO Auto-generated method stub

			}

			// 一个按下弹起的组合动作
			public void keyTyped(KeyEvent e) {

			}
		});
		jf.add(l);
		jf.add(b);
				
    	jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    
    	jf.setFocusable(true);	
    	jf.setVisible(true);
    	

    }  
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值