Znikniecie listenera po uruchomieniu innego

0
 import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;

public class test {
	JLabel l = null;
	public test(){
		JFrame f = new JFrame();
		f.setVisible(true);
		f.setSize(400, 400);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.addKeyListener(new KeyListener(){
			@Override
			public void keyTyped(KeyEvent e) {
			}
			@Override
			public void keyPressed(KeyEvent e) {
				 int keyCode = e.getKeyCode();
				 int x;
				    switch( keyCode ) { 
				        case KeyEvent.VK_UP:
				            x = Integer.parseInt(l.getText());
				            x++;
				            l.setText(String.valueOf(x));
				            break;
				        case KeyEvent.VK_DOWN:
				        	x = Integer.parseInt(l.getText());
				            x--;
				            l.setText(String.valueOf(x));
				            break;
				        case KeyEvent.VK_RIGHT:
				        	x = Integer.parseInt(l.getText());
				            x+=10;
				            l.setText(String.valueOf(x));
				            break;
				        case KeyEvent.VK_LEFT :
				        	x = Integer.parseInt(l.getText());
				            x-=10;
				            l.setText(String.valueOf(x));
				            break;
				     }
			}
			@Override
			public void keyReleased(KeyEvent e) {
				
			}
		});
		
		JPanel p = new JPanel();
		p.setLayout(new GridLayout(0,1));
		
		JButton b1 = new JButton("Wyzeruj");
		b1.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				l.setText("0");
			}
		});
		
		l = new JLabel("0");
		l.setPreferredSize(new Dimension(200,100));
		l.setBackground(new Color(255,150,0));
		l.setOpaque(true);
		l.setHorizontalAlignment(SwingConstants.CENTER);
		l.setVerticalAlignment(SwingConstants.CENTER);
		
		
		f.add(p);
		p.add(b1);
		p.add(l);
	}
	
	public static void main(String[] args){
		new test();
	}
}

Po uruchomieniu wszystko dziala do momentu nacisniecia jbutton. Keylistener przestaje sluchac

0

To problem z focusem. Użyj key binding zamiast keylistenera. Inne ale gorsze rozwiązanie to getTopLevelAncestor().requestFocus(); jeszcze inne to ustawienie setFocusable(false) na buttonie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1