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);
}
}
