1

JButton がある JFrame があります。JButton をクリックすると新しいフレームが作成されるため、2 つのフレームが表示されます。私が望むのは、JButton をもう一度クリックすると、新しい JFrame を作成するのではなく、古いフレームが前面に表示されることです。

新しいフレームが 1 つだけ作成されることを確認するにはどうすればよいですか? それとも別の方法がありますか?

4

4 に答える 4

2

では、フレームがすでに開いているようにチェックするにはどうすればよいですか?それとも別の方法がありますか?

于 2012-12-07T14:50:17.283 に答える
0

最も簡単な方法は、ボタンまたはボタンの親を取得して、新しいフレームが作成されたかどうかを追跡することです。これを行う最善の方法は、フレームへの参照を保持することです。

例えば。

public class MyGUI {

    private JFrame primaryFrame;
    private JFrame secondFrame;
    private JButton someButton;

    public void setupAndDisplay() {
        // initialise the button
        someButton = new JButton("some button");
        someButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                someButtonAction();
            }
        });

        // initialise primary JFrame
        primaryFrame = new JFrame("first frame");
        primaryFrame.add(someButton);
        primaryFrame.setVisible(true);
    }

    // Like most swing stuff this method is not thread safe, as it expects to 
    // only be called on the EventDispatchThread.
    private void someButtonAction() {
        if (secondFrame == null) { // no frame created yet, so create a new one
            secondFrame = new JFrame("second frame");
            secondFrame.setVisible(true);
        } else { // already have a frame, so bring it to the front
            secondFrame.toFront(); 
        }
    }
}

これは最善の方法ではないかもしれません。ダイアログ ウィンドウなど、非常に単純なことをしようとしている場合は、API がそれを支援する簡単な方法を提供している可能性があります。したがって、この道を選択する前に、選択肢を検討し、何をする必要があるかを検討する必要があります。

注意。このコードはテストしていません。設定方法を説明するためのものです。

于 2012-12-07T15:16:51.360 に答える
0
boolean hasWindow = false;

if(hasWindow){
// show existing window
hasWindow = true;
} else {
// create a new window
hasWindow = true;
}

これらの線に沿った何か。

于 2012-12-07T15:51:40.847 に答える
-3

visible を false に設定するだけです

于 2012-12-07T14:45:07.317 に答える