1

私は徒競走を追跡するためのプログラムに取り組んでいます。このプログラムは、いつでも右クリック (これは変更される可能性があります) でランナーがフィニッシュ ラインを通過したことを示すように設定されています。これは、何かを実行し、ランナーをいつでも通過としてマークできるようにするために重要です。レースを終了して結果をまとめるには、ボタンがあります。誤クリックでタイマーが途中で停止するのを防ぐために、タイマーがまだ実行されている間に確認するダイアログがあります。このダイアログを右クリックして、ランナーを通過としてマークすることもできます。ダイアログからの入力をブール値として取得するメソッドがあります。

public static boolean showDialog(Frame parent, boolean modal,String text,RacePanel r)
    {
        ConfirmBox c=new ConfirmBox(parent,modal,text);//this makes the dialog
        for(Component comp:c.getComponents())//this adds a listener for right-click events, to record passing runners
            r.addListener(comp);
        c.setVisible(true);
        return c.yes;//yes is the boolean that should be returned
    }

setVisibleメソッドがダイアログが閉じるのを待つように、私はもともとダイアログモーダルを持っていました。ただし、これにより、プログラムは画面の残りの部分でのマウス クリックを無視しました。非モーダルとして設定すると、この showDialog メソッドはすぐに返されましたが、これは常に false でした。ダイアログがモーダルであるかどうかは実際には気にしません。

モーダル ダイアログで MouseEvents を取得する方法、または非モーダル ダイアログを入力まで待機させる方法はありますか?

アドバイスをいただきありがとうございます。

4

2 に答える 2

1

ダイアログ クラスの状態の変化をリッスンするには、リスナーを使用する必要があります。たとえば、WindowListener は、ダイアログのウィンドウが閉じるのをリッスンできます。ダイアログのクラスで他の状態変化をリッスンする場合は、PropertyChangeListener を使用して「バインドされた」プロパティまたはフィールドを作成することを検討してください。

于 2013-04-22T23:21:03.243 に答える