Закрытие JFrame с помощью клавиатуры - PullRequest
0 голосов
/ 31 марта 2012

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

------- EDIT --------

Я попробовал первые два метода, но не могу заставить их работать должным образом. Вот мой код для фрейма:

import java.awt.Color;    
import javax.swing.JFrame;    
public class ScreensaverTest

{      
 public static void main( String[] args )       
{          
   JFrame frame = new JFrame( "Screen Saver" );
   frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
   frame.setUndecorated(true);
   ScreenSaverJPanel screensaverTestJPanel = new ScreenSaverJPanel();
   frame.add( screensaverTestJPanel );
   frame.setBackground( Color.BLACK );
   frame.setVisible( true );
   frame.setLocation( 0, 0 );
   frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
   }    
}

-------- EDIT ---------

Также я использую метод перекраски для перемещения объектов по экрану и хочу, чтобы некоторые из них двигались с разной скоростью. Я использую генератор случайных чисел для позиционирования, поэтому корректировка чисел на самом деле не вариант, пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 31 марта 2012

Существует множество примеров, как это сделать.

Вам необходимо добавить eventListener к кадру, который прослушивает ввод с клавиатуры, а затем закрывает кадр.Попробуйте взглянуть на это: http://www.java2s.com/Code/Java/Swing-JFC/Reacttoframecloseaction.htm

Вам придется заменить событие чем-то связанное с клавиатурой , но я думаю, что это лучший путь ...

Редактировать:

Чтобы ответить на изменения в посте, вы можете сделать что-то вроде этого:

import javax.swing.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

public class Test {

    public Test() {
        final JFrame frame = new JFrame("Screen Saver");
        frame.validate();
        frame.setVisible(true);

        KeyAdapter listener = new KeyAdapter() {
            @Override public void keyPressed(KeyEvent e) {
                frame.dispose();
            }
        };

        frame.addKeyListener(listener);
    }

    public static void main(String[] args) {
        new Test();
    }

}

И вуаля - это должно сработать.Он компилируется для меня на Java 7.

1 голос
/ 31 марта 2012

Вот код, если у вас есть только один JFrame.Вы должны добавить его при инициализации компонентов.

addKeyListener(new KeyAdapter()
    {
        @Override
        public void keyPressed(java.awt.event.KeyEvent evt)
        {
            processWindowEvent(new WindowEvent(getWindows()[0], WindowEvent.WINDOW_CLOSING));
        }
    });
...