JButton がある JFrame があります。JButton をクリックすると新しいフレームが作成されるため、2 つのフレームが表示されます。私が望むのは、JButton をもう一度クリックすると、新しい JFrame を作成するのではなく、古いフレームが前面に表示されることです。
新しいフレームが 1 つだけ作成されることを確認するにはどうすればよいですか? それとも別の方法がありますか?
JButton がある JFrame があります。JButton をクリックすると新しいフレームが作成されるため、2 つのフレームが表示されます。私が望むのは、JButton をもう一度クリックすると、新しい JFrame を作成するのではなく、古いフレームが前面に表示されることです。
新しいフレームが 1 つだけ作成されることを確認するにはどうすればよいですか? それとも別の方法がありますか?
では、フレームがすでに開いているようにチェックするにはどうすればよいですか?それとも別の方法がありますか?
2 つのJFramesを作成することも、多数の を作成することもお勧めできませんJFrame
。これはトラブルへの道です
オラクルのチュートリアル How to Use CardLayout、このフォーラムのいくつかの Q&A を参照してください。
別のポップアップウィンドウが必要な場合 (実際の重要な理由)、JDialog または JOptionPaneを使用するには、JDialog をsetModal()
/ModalityTypes
および親と一緒に使用します。JFrame
最も簡単な方法は、ボタンまたはボタンの親を取得して、新しいフレームが作成されたかどうかを追跡することです。これを行う最善の方法は、フレームへの参照を保持することです。
例えば。
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 がそれを支援する簡単な方法を提供している可能性があります。したがって、この道を選択する前に、選択肢を検討し、何をする必要があるかを検討する必要があります。
注意。このコードはテストしていません。設定方法を説明するためのものです。
boolean hasWindow = false;
if(hasWindow){
// show existing window
hasWindow = true;
} else {
// create a new window
hasWindow = true;
}
これらの線に沿った何か。
visible を false に設定するだけです