1

私はここで少しピクルスになっています。私はそのような仕事を成し遂げる方法について私の髪を引き裂いてきました。International Baccの場合、プログラムドシエの特定の基準を入力する必要があります。そのうちの1つは、継承や受け渡しパラメーターなどを使用しています。プロトタイプを作成している段階で、同じ内で複数のJPanelを使用する効果を実現したいと考えていました。 JFrame。setVisivble()を使用し、両方のパネルをJFrameに追加することで、これをかなり大雑把に実現しました。私はこれにCardLayoutを使用できることを理解しており、おそらくできるだけ早く実装する予定です。

全体として、私が達成しようとしているのは、ログインボタンが他のjpanelをロードすることですが、これを別々のクラスで行う方法はありますか?myframe.add(new mypanelClass())を使用しているように見えると、まったく新しいJFrameが作成されるためです。基本的に、このファイルにあるミニクラスを別のクラスに分けたいと思います。また、他のパネルのログアウトボタンを使用して、別のクラスからログイン画面に戻るにはどうすればよいですか?助けてくれてありがとう。

これが私のコードです:

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.*;

class Menu extends JFrame
{
JFrame container = new JFrame();
JPanel screen = new JPanel();
JPanel screenBase = new JPanel();
Image ProgramIcon = Toolkit.getDefaultToolkit().getImage("imageIco.png");
ImageIcon logo = new ImageIcon ("Logo.png");
JLabel icon = new JLabel(logo);
JLabel username = new JLabel("Username");
JLabel password = new JLabel("Password");
JTextField user = new JTextField(18);
JPasswordField pass = new JPasswordField(18);
JButton login = new JButton("Login");
JLabel errorInfo = new JLabel("");
int WIDTH = 800;
int HEIGHT = 500;

JPanel screen2 = new JPanel();
JButton logout = new JButton("Logout");
ImageIcon title = new ImageIcon("title.png");
JLabel header = new JLabel(title);

public static void main(String[] args)
{
    try {UIManager.setLookAndFeel("com.nilo.plaf.nimrod.NimRODLookAndFeel");}
    catch (UnsupportedLookAndFeelException e){ JOptionPane.showMessageDialog(null, "GUI Load Error: Unsupported");}
    catch (ClassNotFoundException e) { JOptionPane.showMessageDialog(null, "GUI Load Error: NimROD Missing");} 
    catch (InstantiationException e) { JOptionPane.showMessageDialog(null, "GUI Load Error: Instantiation Missing");} 
    catch (IllegalAccessException e) { JOptionPane.showMessageDialog(null, "GUI Load Error: Illegal Access"); } 
        Menu admin = new Menu();
}

public Menu()
{
    container.setIconImage(ProgramIcon);
    container.setTitle("Login");
    container.setSize(WIDTH,HEIGHT);
    container.setResizable(false);
    container.setVisible(true);
    container.add(screen);
    container.setDefaultCloseOperation(EXIT_ON_CLOSE);
    screen.add(username);
    screen.add(password);
    screen.add(user);
    screen.add(pass);
    screen.add(login);
    screen.add(icon);
    screen.setLayout(null);
    Dimension iconSize = icon.getPreferredSize();
    Dimension usernameSize = username.getPreferredSize();
    Dimension passwordSize = password.getPreferredSize();
    Dimension loginSize = login.getPreferredSize();
    Dimension userSize = user.getPreferredSize();
    Dimension passSize = pass.getPreferredSize();
    username.setBounds(252,170,usernameSize.width,usernameSize.height);
    password.setBounds(495,170,passwordSize.width,passwordSize.height);
    user.setBounds(180,200,userSize.width,userSize.height);
    pass.setBounds(420,200,passSize.width,passSize.height);
    login.setBounds(375,250,loginSize.width,loginSize.height);
    icon.setBounds(250,50,iconSize.width,iconSize.height);

    ButtonHandler handle = new ButtonHandler();
    login.addActionListener(handle);

    new BaseScreen();
}

public class BaseScreen
{
    public BaseScreen()
    {
        container.add(screen2);
        screen2.setLayout(null);
        screen2.add(logout);
        screen2.add(header);
        screen2.setVisible(false);
        Dimension headerSize = header.getPreferredSize();
        Dimension logoutSize = logout.getPreferredSize();
        logout.setBounds(720,440,logoutSize.width,logoutSize.height);
        header.setBounds(0,0,headerSize.width,headerSize.height);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        ButtonHandler handle = new ButtonHandler();
        logout.addActionListener(handle);
    }
}


public class ButtonHandler implements ActionListener
{
    public void actionPerformed(ActionEvent event)
    {
        if (event.getSource() == login)
        {
            if((user.getText().equals("")) && (pass.getText().equals("")))
            {
                errorInfo.setText("Please enter username and password");
                screen.add(errorInfo);
                errorInfo.setForeground(Color.RED);
                Dimension errorInfoSize = errorInfo.getPreferredSize();
                errorInfo.setBounds(300,300,errorInfoSize.width,errorInfoSize.height);
            }

            if((user.getText().equals("admin"))&&(pass.getText().equals("password")))
            {
                screen.setVisible(false);
                screen2.setVisible(true);
                container.setTitle("Menu");
                user.setText("");
                pass.setText("");
            }
        }

        if (event.getSource() == logout)
        {
            screen2.setVisible(false);
            screen.setVisible(true);
            container.setTitle("Login");
        }
    }
}
}
4

1 に答える 1

0

JFrame を拡張するクラス内で JFrame のインスタンス化を停止する必要があります。これは 2 つの JFrame です。JFrame コンテナ = this; と記述します。次に、IDE のインライン機能を使用してオブジェクト フィールドをインライン化します。

BaseScreen が JFrame の「this」にアクセスする必要がある場合は、その値を BaseScreen のコンストラクターに渡すことができ、BaseScreen はその値をフィールドとして格納できます。「クラスを一緒にリンクする」という魔法はありません。値を渡すことで、あるオブジェクトに別のオブジェクトについて伝えます。私が言っていることがよくわからない場合は、Java チュートリアルのコンストラクターのセクションにアクセスする必要があります - http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

于 2012-10-10T21:27:08.040 に答える