私はJavaGUIプロジェクトを作成していますが、これは2つのフレームで構成されています。
問題は、最初のフレームから2番目のフレームを呼び出すときに、最初のフレームの可視性がfalseに設定されるように設定したことです。問題は、2番目のフレームのボタンを使用して最初のフレームを再び表示するにはどうすればよいかです。
このメソッドを捨てて、代わりに新しいjpanelを作成する必要がありますか?jpanelにはjframeと同様の機能がありますか?
私はJavaGUIプロジェクトを作成していますが、これは2つのフレームで構成されています。
問題は、最初のフレームから2番目のフレームを呼び出すときに、最初のフレームの可視性がfalseに設定されるように設定したことです。問題は、2番目のフレームのボタンを使用して最初のフレームを再び表示するにはどうすればよいかです。
このメソッドを捨てて、代わりに新しいjpanelを作成する必要がありますか?jpanelにはjframeと同様の機能がありますか?
の使用を検討してくださいCardLayout
。このようにして、別のフレームを必要とせずに、複数のUIを介して切り替えることができます。使い方はこちらです。
編集:ギヨームが彼のコメントに投稿したように、アンドリューからのこの回答は、レイアウトの使用方法もカバーしています。
Edit2:
私の最新の投稿についてもう少し情報をリクエストしたので、そのようなクラスは次のようになります。
import javax.swing.JFrame;
public abstract class MyFrameManager {
static private JFrame startFrame,
anotherFrame,
justAnotherFrame;
static public synchronized JFrame getStartFrame()
{
if(startFrame == null)
{
//frame isnt initialized, lets do it
startFrame = new JFrame();
startFrame.setSize(42, 42);
//...
}
return startFrame;
}
static public synchronized JFrame getAnotherFrame()
{
if(anotherFrame == null)
{
//same as above, init it
}
return anotherFrame;
}
static public synchronized JFrame getJustAnotherFrame()
{
//same again
return justAnotherFrame;
}
public static void main(String[] args) {
//let's test!
JFrame start = MyFrameManager.getStartFrame();
start.setVisible(true);
//want another window
JFrame another = MyFrameManager.getAnotherFrame();
another.setVisible(true);
//oh, doenst want start anymore
start.setVisible(false);
}
}
この方法では、インスタンス化は1JFrame
回だけですが、マネージャークラスを介していつでもそれらにアクセスできます。その後、彼らをどうするかはあなたの決断です。
また、シングルトンにとって非常に重要なスレッドセーフにしました。