Я написал программу на Java, которая проверяет restAPI каждые 8 секунд и, если обнаруживает изменение состояния, отображает небольшое предупреждение на экране в нижнем углу. Предупреждение предназначено для информирования пользователя о критической ситуации, но не прерывания его работы. Моя проблема заключается в том, что когда срабатывает Alert и JFrame становится видимым, он крадет ввод с клавиатуры. Поэтому, пока он мигает, если пользователь хочет продолжить работу в другом приложении, ему необходимо постоянно нажимать на это приложение.
Я использую setVisible на JFrame (меняя его с false на true и обратно), чтобы создать эффект «мигания». Каждый раз, когда JFrame.setVisible имеет значение true, Windows автоматически фокусирует ввод с клавиатуры на предупреждение.
Я попытался добавить setFocusable (false) при инициализации JFrame, но, похоже, это не имеет никакого эффекта.
Вот как я инициализирую Jframe:
public AlertJFrame(int pos) {
this.Position = pos;
setBounds(100, 100, 450, 300);
setTitle("Alert");
setResizable(false);
setFocusable(false);
setAlwaysOnTop(true);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setBounds(130, 130, 218, 120);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice defaultScreen = ge.getDefaultScreenDevice();
Rectangle rect = defaultScreen.getDefaultConfiguration().getBounds();
int x = (int) rect.getMaxX() - this.getWidth();
int y = (int) rect.getMaxY() - this.getHeight();
x = x - 100;
y = y - pos;
setLocation(x,y);
setUndecorated(true);
contentPane = new JPanel();
contentPane.setBackground(new Color(255, 69, 0));
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
this.message = new JLabel("<html>Starting Headsup<br>Contacting server...</html>");
message.setHorizontalAlignment(SwingConstants.CENTER);
message.setForeground(new Color(255,255,255));
message.setFont(new Font("Tahoma", Font.PLAIN, 14));
message.setBounds(10,11,198,98);
contentPane.add(message);
}
, а затем я просто вызываю .setVisible (true) на Jframe, и тогда он крадет ввод с клавиатуры.
Мне бы хотелось, чтобы окно мигало на экране пользователя, не прерывая их работу.
Спасибо
РЕДАКТИРОВАТЬ: Может быть полезно увидеть изображение. Так выглядит программа при запуске. Я использую JFrames из-за их способности убирать художественные оформления окна и окрашивать, размещать и изменять их размер. Любые изменения, которые я делаю, основной вывод все равно должен выглядеть следующим образом. https://www.dropbox.com/s/x1z3isdln83stnm/headsup.png?dl=0
Спасибо