ログイン設定後に実際のソフトウェアを表示する、ログイン用のパネルを備えたプログラムのGUIを作成する必要があります。
したがって、問題は次のとおりです。
2つのフレームを作成し、最初のフレームをログイン用に、2番目のフレームをプログラム用に表示する必要がありますか?または、2つの異なるパネルを追加し、プログラムの起動時にログインを非表示にする方がよいでしょうか。
ログイン設定後に実際のソフトウェアを表示する、ログイン用のパネルを備えたプログラムのGUIを作成する必要があります。
したがって、問題は次のとおりです。
2つのフレームを作成し、最初のフレームをログイン用に、2番目のフレームをプログラム用に表示する必要がありますか?または、2つの異なるパネルを追加し、プログラムの起動時にログインを非表示にする方がよいでしょうか。
これは少し主観的です。私にとっては、アプリケーションがどれほど複雑であるか、複数のセッションをサポートする必要があるかどうか、それらのセッションが単一のフレームを共有するかどうかにかかっています。
CardLayout
アプリケーションが比較的単純な場合(たとえば、1つまたは2つのビューがある場合)、aのようなものを使用して、メインアプリケーションフレーム内にログインペインを表示するだけで問題ないと思います。ユーザーが正常に認証されたら、メインビューに切り替えます。
アプリケーションがより複雑な場合は、別のダイアログを使用することを検討します。
ユーザーに複数のセッションを許可している場合でも、別のダイアログを使用するかどうかは、実際のアプリケーションがどれほど複雑か(IMHO)になります。
また、ユーザーがログインする前に何かできるかどうかも検討します。たとえば、設定を更新できますか?その場合、ログインダイアログはモーダルになる可能性が高いため、パネルを使用するのが適切です。
個人的には、最初に実際のプログラム用のjFrameを作成し、次に(すぐに)jDialogウィンドウを開いて、jFrameの前で開きます。jDialogクラスには、開いたときに他のフレームでアクションを実行できないという便利なプロパティがあります。したがって、最初に(パスワードの入力などのアクションの後で)閉じる必要があります。
フレームのGlassPaneを使用することはオプションです(ドロップダウンを使用する必要がないと仮定します)。ペインシステムの悪用だと主張する人もいるかもしれませんが、ログイン画面がシンプルであれば合法だと思います。
利点は、使用できるようになっていること(アプリケーションに大幅な変更を加える必要がないこと)と、イベントを食いつぶすこと(実際のアプリケーションに渡されないこと)です。表示/非表示も非常に簡単です。
欠点は、いくつかのスイングコンポーネントがガラス板で機能しないことです(JComboBoxが例です)。
GlassPaneの使用例を次に示します。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class QuickTest {
public QuickTest(){
//Setup Frame
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setSize(400, 300);
frame.setLocationRelativeTo(null);
//Setup Main Content
JPanel main = new JPanel();
main.add(new JLabel("Here's the application!"));
frame.setContentPane(main);
//Setup login Screen
Box login = new Box(BoxLayout.Y_AXIS){
// Makes the main screen faded
public void paintComponent(Graphics g){
g.setColor(new Color(255,255,255,200));
g.fillRect(0,0, getWidth(), getHeight());
super.paintComponent(g);
}
};
login.add(new JLabel("Username here:"));
login.add(new JLabel("Password here:"));
JButton loginButton = new JButton("login");
loginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
frame.getGlassPane().setVisible(false);
}
});
login.add(loginButton);
login.add(Box.createVerticalGlue());
frame.setGlassPane(login);
frame.getGlassPane().setVisible(true);
//Show Frame
frame.setVisible(true);
}
public static void main(String[] args){
new QuickTest();
}
}
ログイン用のページを作成し、セッションを有効にしてユーザー権利を確認します。ユーザーが識別された場合は、別のページにリダイレクトできます。