Как заблокировать мышь и ключевых событий в приложении

Java на базе Swing имеет метод реализации блокирование мыши и ключевые события в описание. Этот решение использует для блокировки мыши и ключевые события. Он может быть полезен для разработчиков, которые хотят, чтобы пользователи использовать приложение с ограниченным возможностями.

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
 
public class GlassExample extends JFrame {
     
    JPanel glass = new JPanel(new GridLayout(0, 1));
    // добавить метку, чтобы попалось в ловушку в активном окне
    JLabel padding = new JLabel();
    JProgressBar waiter = new JProgressBar(0, 100);
    Timer timer;
     
    public GlassExample() {
        super("GlassPane Demo");
        setSize(500, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
         
        // Вызывать сообщений и прогресс-бар
        JPanel controlPane = new JPanel(new GridLayout(2,1));
        controlPane.setOpaque(false);
        controlPane.add(new JLabel("Please wait..."));
        controlPane.add(waiter);
        glass.setOpaque(false);
        glass.add(padding);
        glass.add(new JLabel());
        glass.add(controlPane);
        glass.add(new JLabel());
        glass.add(new JLabel());
         
        // ловушка мыши и ключевые события. Могут обеспечить разумный 
        // ключ обработчик, если вы хотели, чтобы позволить такие вещи, как нажатие клавиши 
        // что бы отменить длительную операцию. 
        glass.addMouseListener(new MouseAdapter() {});
        glass.addMouseMotionListener(new MouseMotionAdapter() {});
        glass.addKeyListener(new KeyAdapter() {});
         
        
        padding.setNextFocusableComponent(padding);  // 1.3
        setGlassPane(glass);
         
        
        JPanel mainPane = new JPanel();
        mainPane.setBackground(Color.white);
        JButton redB = new JButton("Red");
        JButton blueB = new JButton("Blue");
        JButton greenB = new JButton("Green");
        mainPane.add(redB);
        mainPane.add(greenB);
        mainPane.add(blueB);
        mainPane.add(new JLabel(new ImageIcon("java-tip.gif")));
         
        // убидится что фокус не оптерян
        PopupDebugger pd = new PopupDebugger(this);
        redB.addActionListener(pd);
        greenB.addActionListener(pd);
        blueB.addActionListener(pd);
         
        // Теперь установим несколько кнопок и изображений для основного приложения
        JButton startB = new JButton("Start the big operation!");
         
        startB.addActionListener(new ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent A) {
                glass.setVisible(true);
                padding.requestFocus();  // required to trap key events
                startTimer();
            }
        });
         
        Container contentPane = getContentPane();
        contentPane.add(mainPane, BorderLayout.CENTER);
        contentPane.add(startB, BorderLayout.SOUTH);
    }
     
    // Прикрепить всплывающее окно отладчика для основного приложения кнопками, так что вы
    // видеть эффект на
    // progress bar
    public void startTimer() {
         
        if (timer == null) {
             
            timer = new Timer(1000, new ActionListener() {
                 
                int progress = 0;
                 
                public void actionPerformed(ActionEvent A) {
                    progress += 10;
                    waiter.setValue(progress);
                     
                    // Быстрый способ для запуска 10-секундный таймер и обновление
                    // прогресс-бар
                    if (progress >= 100) {
                        progress = 0;
                        timer.stop();
                        glass.setVisible(false);
                        waiter.setValue(0);
                    }
                }
            });
        }
         
        if (timer.isRunning()) {
            timer.stop();
        }
         
        timer.start();
    }
     

    public class PopupDebugger implements ActionListener {
         
        private JFrame parent;
         
        public PopupDebugger(JFrame f) {
            parent = f;
        }
         
        public void actionPerformed(ActionEvent ae) {
            JOptionPane.showMessageDialog(parent, ae.getActionCommand());
        }
    }
     
    public static void main(String[] args) {
        GlassExample ge = new GlassExample();
        ge.setVisible(true);
    }
}
Обновлено: 07.04.2017 — 15:40

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.