簡単に言えば、私が望むのは、モーダル 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 );
}
}
出力ログの例を見ると、JDialog が開かれたときに JFrame からのイベントが渡されないことがわかります (例で追加されたグローバル AWT イベント リスナーにも渡されます)。
ブロックされたJFrameのクリックをキャッチする方法はありますか?
または、ブロックされた何かがユーザーによって「触れられた」ときに、少なくともイベントをキャッチしますか?
これが必要な理由は、そのようなイベントが発生したときにカスタム装飾された JDialog ブリックを作成するためです。