-1

残念ながら、私たちのチーム リーダーは、この軽量デスクトップ アプリに Swing を使用することを決定しました。Swing を使用した経験はありません。プロジェクトの GUI 側に取り組みます。要素を含むフレームを既に作成し、イベント リスナーにロジックを記述しました。ユーザーがログインした後、ユーザーを新しいフレームにリダイレクトしたいと思います。

それ、どうやったら出来るの?ありがとう

PS初心者向けの良いチュートリアルを教えていただければ幸いです

4

5 に答える 5

4

用語が混同されているようです。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);
            }
        });
    }
}
于 2012-10-17T13:20:35.867 に答える
4

@Gilbert Le Blancが指摘したように(彼に+1)。Swing では、複数JFrameの sを使用することはお勧めできません。

あなたが望むものを達成するには:

  • CardLayoutコンポーネントの動的な切り替えを可能にする使用

  • または、新しい(+1 Fess)を使用JFrame#removeAll()して追加しますJPanel

  • JDialog/を使用してみてJOptionPane、メインにリダイレクトしてくださいJFrame 。トピックに関する適切なリンクは次のとおりです:ダイアログの作成方法

于 2012-10-17T13:15:52.127 に答える
1

既存のフレームとほぼ同じ方法で新しいフレームを作成できます。

MyFrame f = new MyFrame(); //MyFrame extends javax.swing.JFrame

そして、それを前面に持ってきます。

f.setVisible(true);
f.toFront();
于 2012-10-17T12:49:01.150 に答える