残念ながら、私たちのチーム リーダーは、この軽量デスクトップ アプリに Swing を使用することを決定しました。Swing を使用した経験はありません。プロジェクトの GUI 側に取り組みます。要素を含むフレームを既に作成し、イベント リスナーにロジックを記述しました。ユーザーがログインした後、ユーザーを新しいフレームにリダイレクトしたいと思います。
それ、どうやったら出来るの?ありがとう
PS初心者向けの良いチュートリアルを教えていただければ幸いです
残念ながら、私たちのチーム リーダーは、この軽量デスクトップ アプリに Swing を使用することを決定しました。Swing を使用した経験はありません。プロジェクトの GUI 側に取り組みます。要素を含むフレームを既に作成し、イベント リスナーにロジックを記述しました。ユーザーがログインした後、ユーザーを新しいフレームにリダイレクトしたいと思います。
それ、どうやったら出来るの?ありがとう
PS初心者向けの良いチュートリアルを教えていただければ幸いです
用語が混同されているようです。JFrame
「フレーム」と聞くと、これは「ウィンドウ」に相当すると思います。したがって、ほとんどの場合、複数のウィンドウを使用するのではなく、ウィンドウのコンテンツを変更することをお勧めします。コンテンツは通常「JPanel」で作られています。
したがって、一般的に、あなたはあなたを設定し、あなたJFrame
はこれでコンテンツを設定します:
JPanel loginPanel = new JPanel();
frame.setContentPane(loginPanel);
ログインパネルを新しいパネルに置き換える場合は、新しいパネルをその関数に渡すだけです。
JPanel mainMenuPanel = new JPanel();
frame.setContentPane(mainMenuPanel);
(もちろん、これらのパネルにいくつかのコンテンツが必要です)
簡単な例を次に示します。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class PanelRetriever{
Box panel1;
JPanel panel2;
public PanelRetriever(final JFrame frame){
//Build the first login panel
panel1 = Box.createVerticalBox();
panel1.setBackground(Color.orange);
panel1.setOpaque(true);
panel1.add(Box.createVerticalGlue());
panel1.add(new JTextField(10));
JButton login = new JButton("Login");
login.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
frame.setContentPane(getPanel2());
frame.validate();
}});
panel1.add(login);
panel1.add(Box.createVerticalGlue());
//Build second panel
panel2 = new JPanel();
panel2.setBackground(Color.blue);
panel2.setOpaque(true);
JButton logout = new JButton("Logout");
logout.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
frame.setContentPane(getPanel1());
frame.validate();
}});
panel2.add(logout, BorderLayout.CENTER);
}
public Container getPanel1(){
return panel1;
}
public Container getPanel2(){
return panel2;
}
public static void main(String args[])
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
JFrame frame = new JFrame();
PanelRetriever pr = new PanelRetriever(frame);
frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
frame.setContentPane(pr.getPanel1());
frame.setPreferredSize(new Dimension(500, 400));
frame.pack();
frame.setVisible(true);
}
});
}
}
@Gilbert Le Blancが指摘したように(彼に+1)。Swing では、複数JFrame
の sを使用することはお勧めできません。
あなたが望むものを達成するには:
CardLayout
コンポーネントの動的な切り替えを可能にする使用
または、新しい(+1 Fess)を使用JFrame#removeAll()
して追加しますJPanel
JDialog
/を使用してみてJOptionPane
、メインにリダイレクトしてくださいJFrame
。トピックに関する適切なリンクは次のとおりです:ダイアログの作成方法
既存のフレームとほぼ同じ方法で新しいフレームを作成できます。
MyFrame f = new MyFrame(); //MyFrame extends javax.swing.JFrame
そして、それを前面に持ってきます。
f.setVisible(true);
f.toFront();