Перемещение изображения с помощью клавиатуры — Java

Я хотел переместить свое изображение с помощью клавиш со стрелками на клавиатуре. когда я нажимал клавиши со стрелками, он перемещался в соответствии с направлением. Однако мне нужно щелкнуть изображение, прежде чем я смогу его переместить. Могу ли я узнать, как отредактировать код, чтобы мне не нужно было нажимать на изображение, прежде чем я смогу его переместить? Я также хотел бы знать, как заставить изображение появляться слева, как только оно достигает права, и наоборот.

Мои коды:

    Collect.addKeyListener(new KeyAdapter() {
         public void keyPressed(KeyEvent ke)
         {   
         if(ke.getKeyCode() == KeyEvent.VK_LEFT)
             {
             Collect.setLocation(Collect.getX()-8,Collect.getY());
             repaint();
         }
         if(ke.getKeyCode() == KeyEvent.VK_RIGHT)
             {
             Collect.setLocation(Collect.getX()+8,Collect.getY());
             repaint();
         }
     }
 });
     Collect.addMouseListener(new MouseAdapter()
     {
     public void mouseClicked(MouseEvent me)
         {
         if(me.getClickCount() == 1)
             {
             boolean dd =  Collect.isOptimizedDrawingEnabled();
             boolean ff =  Collect.requestFocusInWindow();
             repaint();
         }
     }

 }); 

person KYQ    schedule 03.01.2012    source источник
comment
1) Чтобы быстрее получить помощь, опубликуйте SSCCE. 2) Изучите общую номенклатуру Java (например, Collect -> collect) и используйте ее в примерах кода.   -  person Andrew Thompson    schedule 03.01.2012


Ответы (3)


Вы должны посмотреть KeyBindings, в противном случае вам придется JComponent#setFocusable() что вставьте Image, пример для Moving Image

person mKorbel    schedule 03.01.2012
comment
+1 за привязки клавиш. Похожий пример есть здесь. - person trashgod; 03.01.2012

Collect.requestFocusInWindow();

requestFocusInWindow()..

Запрашивает, чтобы этот Компонент получил фокус ввода, если предок этого Компонента верхнего уровня уже является окном в фокусе.

Обязательно вызывайте это только после того, как главное окно станет видимым и получит фокус.

person Andrew Thompson    schedule 03.01.2012

KeyListeners работают только тогда, когда компонент, у которого есть прослушиватель, имеет фокус. Вы фокусируетесь на том, что кажется Собирать, щелкая по нему. Затем работает слушатель. Вы можете добавить прослушиватель к другим вещам или заставить фокус оставаться на чем-то вроде внешнего фрейма, используя прослушиватель фокуса, чтобы восстановить фокус всякий раз, когда он теряется.

person Dave    schedule 03.01.2012