簡單地說 - 我想要的是在被模態JDialog阻止的窗口上單擊鼠標。如何在被打開的JDialog阻止的窗口上捕獲鼠標單擊事件
下面是一個例子:
public class BlockedFrameTest
{
public static void main (final String[] args)
{
Toolkit.getDefaultToolkit().addAWTEventListener (new AWTEventListener()
{
@Override
public void eventDispatched (final AWTEvent event)
{
if (event instanceof MouseEvent)
{
System.out.println (event);
}
}
}, AWTEvent.MOUSE_EVENT_MASK);
final JFrame frame = new JFrame ("Frame");
frame.add (new JLabel ("Content")
{
{
setBorder (BorderFactory.createEmptyBorder (100, 100, 100, 100));
}
});
frame.pack();
frame.setLocationRelativeTo (null);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
frame.setVisible (true);
final JDialog dialog = new JDialog (frame, "Dialog");
dialog.setModal (true);
dialog.add (new JLabel ("Content")
{
{
setBorder (BorderFactory.createEmptyBorder (50, 50, 50, 50));
}
});
dialog.pack();
dialog.setLocationRelativeTo (frame);
dialog.setVisible (true);
}
}
通過查看示例輸出日誌,你會看到,從JFrame的事件不會傳遞時的JDialog打開(甚至到在本例中添加的全球AWT事件偵聽器) 。
所以我想知道 - 有沒有什麼辦法可以捕獲被阻止的JFrame上的點擊?
或者至少在用戶「觸摸」某個事件時捕捉事件?
我需要這個的原因是當這種事件發生時,使定製裝飾的JDialog blick。
我知道,使用本機功能捕獲這樣的事件可能是一個解決方案,但我不會使用它,因爲它只會在代碼中添加很多混亂,並且會在某一天使它不可維護 - 我寧願保持純Java。 –
嗯困難。只要你點擊應用程序之外,那麼從技術上講,你現在不再處於Java世界。 –
不是,我只是單擊同一個Java應用程序的另一部分 - 我提到我只需要在用戶單擊被對話框阻止的同一個應用程序的某個其他部分時捕獲事件,而不是在系統中啓動的另一個隨機應用程序。 –