2013-06-24 8 views
-2

Я пытаюсь создать программу, где изображение находится на экране, и если переменный ключевой код равен ключу VK_ESCAPE, он удалит изображение с экрана с помощью метода validate. Как я могу сфокусировать keylistener, чтобы я мог запускать оператор if и проверять изображение. У меня импортированы правильные библиотеки, и я не получаю никаких ошибок ?!Java Keylistener Если заявление

public void keyPressed(KeyEvent e){ 
    int keycode = e.getKeyCode(); 
    if(keycode == KeyEvent.VK_ESCAPE){ 
    scroll = new ImageIcon("").getImage(); 
    validate(); 
    e.consume(); 
    } 
} 
+0

Является 'keyPressed' называется вообще? Компонент, на котором вы хотите запустить событие, должен иметь фокус клавиатуры. Рекомендуемой альтернативой является использование [привязки клавиш] (http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html) вместо 'KeyListener'. Тогда компонент не должен быть владельцем фокуса. –

+0

Вам нужно удалить изображение из родителя, например. JPanel, а затем вызовите revalidate() –

ответ

3

Вы должны использовать Key Bindings вместо Key Listeners причины с key listeners основной проблемой является то, что вы должны иметь фокус и к тому же в KeyBinding вы только связать действие с ключом, в keylisteners привязку ко всем. Кстати, вы ничего не снимаете в вашем компоненте вы должны удалить изображение, а затем позвонить по телефону revalidate().

Учебник How to use key bindings

Пример:

AbstractAction escapeAction = new AbstractAction() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     myComponent.remove(img); // if you are not using label,if yes label.setImage(null); 
     revalidate(); // im not pretty sure about this 2 lines 
     repaint(); //suggested by madProgrammer 
    }}; 
String key = "ESCAPE"; 
KeyStroke keyStroke = KeyStroke.getKeyStroke(key); 
component.getInputMap().put(keyStroke, key); 
component.getActionMap().put(key, escapeAction); 
+0

Хотя я, безусловно, согласен, и объяснение того, почему OP должен использовать привязки клавиш «KeyListener», не будет сбиваться с пути, ничего подобного слепым советам;) – MadProgrammer

+0

@MadProgrammer - это правильно удалить img, как это ? предположив, что у него есть img как конечная переменная – nachokk

+0

. В зависимости от того, что пытается сделать OP. Установка значка ярлыка на «null» может работать так же хорошо. Вам все равно нужно будет пересмотреть (и, возможно, перерисовать) родительский контейнер, чтобы его обновить. – MadProgrammer