0

jApplet を拡張するクラスと、jpanel を拡張する 3 つのクラスがあります。現在、特定の Jpanel を使用して JButton から取得したアクションでこれらの jPanel を切り替えようとしています。

問題: init() メソッドでアプレット自体から見えるように設定したアプレットの最初のパネルをロード/表示できます。しかし、jPanelフォームのボタンをクリックして同じことをしようとすると、うまくいきません。Me パネルは閉じられますが、追加された新しいパネルは表示されません。

以下のコードのコード コンテキスト:

  1. 応用。java はアプレットクラスです
  2. ユーザー_ログイン。javaはjpanelクラスです (1)
  3. Reset_Password.java は jpanel クラスです(2)

User_Login jpanel の [Change Password] ボタンをクリックすると、Reset_Password jpanel が呼び出されます。

コードは以下の通りです。どんな助けでも大歓迎です

アプリケーション.java

package business_intelligence;

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


/**
 *
 * @author lokesh
 */
public class Application extends JApplet {

int x = 0;

Container content_pane = getContentPane();

User_Login obj = new User_Login();
Reset_Password obj1 = new Reset_Password();



public void init() {

    setVisible(true);
    setSize(1200, 1000);
   content_pane.add(obj);
   content_pane.add(obj1);
   content_pane.add(obj2);
   add(obj1);
   add(obj2);
   add(obj);
   obj.setVisible(true);
   obj1.setVisible(false);
   obj2.setVisible(false);
}

public void Change()
{
    content_pane.removeAll();
    content_pane.add(obj1);
    add(obj1);
    obj1.setVisible(true);
}
public void Login()
{
    content_pane.removeAll();
    content_pane.add(obj);
    add(obj);
    obj.setVisible(true);
}
}

User_Login.java

package business_intelligence;
import javax.swing.*;
import java.awt.*;
import javax.swing.JApplet.*;
import java.awt.event.*;
import java.awt.event.ActionListener;
import java.awt.event.KeyListener;
/**
 *
 * @author lokesh
 */
public class User_Login extends JPanel implements ActionListener {
FlowLayout f;
JLabel l1;
JLabel l2, l3, h1 ;
JButton b1;
JButton b2,b3,b4;
Font fo1 = new Font("Verdana",Font.BOLD,25);
Font fo2 = new Font("Verdana",Font.PLAIN,15);
JTextField tf1 = new JTextField();
JPasswordField tp1 = new JPasswordField();
Color bg = new Color (255,255,204);

public User_Login()
{

    setVisible(true);
    setSize(1200, 1000);
    setBackground(bg);
    setLayout(null);
    h1 = new JLabel("Welcome to Business Intelligence Application -- Login");
 h1.setFont(fo1);
 h1.setBounds(100, 02, 800, 50);
 l1 = new JLabel("User-name");
 l1.setFont(fo2);
 l2 = new JLabel("Password");
 l2.setFont(fo2);
 l3 = new JLabel();
 l3.setFont(fo2);
 l3.setForeground(Color.RED);
 b1 = new JButton("Submit");
 b2 = new JButton("Close");
 b3 = new JButton("Reset Password");
 b4 = new JButton("New User Request");
 add(h1);
 l1.setBounds(100, 100, 100, 40);
 add(l1);
 l2.setBounds(100, 150, 100, 40);
 add (l2);
 add(b1);
 add(b2);
 tf1.setBounds(300, 100, 200, 40);
 add(tf1);
 tp1.setBounds(300, 150, 200, 40);
 add(tp1);
 b1.setBounds(25, 260, 150, 50);
 add(b1);
 b2.setBounds(200, 260, 150, 50);
 add(b2);
 l3.setBounds(100, 200, 400, 50);
 add(l3);
 b3.setBounds(375, 260, 150, 50);
 add(b3);
 b4.setBounds(550, 260, 160, 50);
 add(b4);
 b1.addActionListener(this);
 b2.addActionListener(this);
 b3.addActionListener(this);
 b4.addActionListener(this);

}

public void verifyLogin()
{

    String uid = tf1.getText();
    char ch[] = tp1.getPassword();
    String pwd = String.valueOf(ch);

    Connect obj1 = new Connect();
    obj1.connect();
    int r = obj1.verifyLogin(uid, pwd);
    if (r ==1)
    {
        setVisible(false);
        Application obj = new Application();
        obj.Dashboard();

    }
    else
    {
        l3.setText("Incorrect User-name or Password. Try again.");
    }
}

public void actionPerformed(java.awt.event.ActionEvent evt)
{
    Object ob = evt.getSource();
    if(ob == b1)
        verifyLogin();
    else if (ob == b2)
            System.exit(0);   
    else if (ob == b3)
    {   
        setVisible(false);
        Application obj = new Application();
        obj.Change();  
    }

}

}

Reset_Password.java

package business_intelligence;

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;

//mport java.awt.event.*;
/**
 *
 * @author lokesh
 */
public class Reset_Password extends JPanel implements ActionListener {

String email;
String pwd;
String cpwd;
JLabel l1,l2, l3,l4, h1 ;
JButton b1;
JButton b2;
Font fo3 = new Font("Verdana",Font.BOLD,25);
Font fo4 = new Font("Verdana",Font.PLAIN,15);
JTextField tf1 = new JTextField();
JPasswordField p1 = new JPasswordField();
JPasswordField p2 = new JPasswordField();
int r;

Color bg = new Color (255,255,204);



public Reset_Password()
{
    setSize(1200, 1000);
    setBackground(bg);
    setLayout(null);
    h1 = new JLabel("Welcome to Business Intelligence Application -- Change Password");
    h1.setFont(fo3);
    h1.setBounds(100, 02, 1000, 50);
    add(h1);
    l1 = new JLabel("E-mail");
    l1.setFont(fo4);
    l2 = new JLabel("New Password");
    l2.setFont(fo4);
    l3 = new JLabel("Confirm Password");
    l3.setFont(fo4);
    l4 = new JLabel("");
    l4.setFont(fo4);
    l4.setForeground(Color.RED);
    b1 = new JButton("Submit");
    b2 = new JButton("Cancel");
    l1.setBounds(100, 100, 100, 40);
    add(l1);
    l2.setBounds(100, 150, 100, 40);
    add (l2);
    add(b1);
    add(b2);
    tf1.setBounds(300, 100, 200, 40);
    add(tf1);
    p1.setBounds(300, 150, 200, 40);
    add(p1);
    p2.setBounds(300, 200, 200, 40);
    add(p2);
    l3.setBounds(100, 200, 400, 50);
    add(l3);
    l4.setBounds(100, 250, 400, 50);
    add(l4);
    b1.setBounds(100, 300, 150, 50);
    add(b1);
    b2.setBounds(350, 300, 150, 50);
    add(b2);
    b1.addActionListener(this);
    b2.addActionListener(this);
}


@Override
public void actionPerformed (java.awt.event.ActionEvent e)       
{                                         

    Object ob = e.getSource();
    if(ob == b1)    
        resetPassword();
    if (ob == b2)
    { 

           Application obj = new Application ();
           obj.Login();
    }

}

    // TODO add your handling code here                                        

/*private void ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    //setVisible(false);

    if (isVisible()== true)
        setVisible(false);

    this.remove(this);
    Business_Intelligence obj = new Business_Intelligence();
    obj.activated();

} */     



public void resetPassword()
{

    email = tf1.getText();
    char ch[] = p1.getPassword();
    pwd = String.valueOf(ch);
    char ch1[] = p2.getPassword();
    cpwd = String.valueOf(ch1);
    if (ch.length >= 8)
    {

        if(pwd.equals(cpwd))
        {
        Connect obj = new Connect();
        obj.connect();
        int r = obj.verifyEmail(email);
        if (r==1)
            {
                obj.connect();
                obj.updat(email, pwd);
                l4.setVisible(true);
                l4.setText("password changed");              
                p1.setText(null);
                p2.setText(null);
                tf1.setText(null);

            }
        if (r==0)
            {
                l4.setVisible(true);
                l4.setText("incorrect e-mail id");
            }
        }
        if(!pwd.equals(cpwd))
        {
        //jLabel5.setForeground(Color.RED);
        l4.setVisible(true);
        l4.setText("password and confirm password did not match");     
        } 
    }
    if (ch.length < 8)
    {
     //jLabel5.setForeground(Color.RED);   
     l4.setVisible(true);
     l4.setText("password should be a minimum of 8 characters");
    }
}
}
4

2 に答える 2

1

アプレットの ContentPane に直接配置する代わりに、CardLayoutその ContentPane に を配置してから、その CardLayout の表示パネルを変更する必要があります。これははるかに簡単な操作です。

編集

OK、ContentPane に CardLayout を配置し、他のすべてのパネルをそれに追加するとします。

そのためには、init メソッドを次のように変更するだけです。

public void init() {

    setVisible(true);
    setSize(1200, 1000);

    // Shamelessely borrowed from http://download.oracle.com/javase/tutorial/uiswing/layout/card.html
    // which you SHOULD definitevely read
    content_pane.setLayout(new CardLayout());

    // First item will stay visible, as long as it is not changed
    content_pane.add(obj, "user_login");
    content_pane.add(obj1, "user_panel");
    content_pane.add(obj2, "reset_login");

}

次に、ユーザーがログインし、アクティブなパネルを変更する必要がある場合は、 Change メソッドをそのように変更します

public void Login()
{
    CardLayout card = (CardLayout) content_pane.getLayout();
    card.show(content_pane, "user_panel");
}
于 2011-06-14T08:54:04.740 に答える
0
japplet.setSize ( panel.getWidth (), panel.getHeight () );
japplet.setContentPane ( panel );
panel.revalidate ();
panel.repaint ();
japplet.revalidate ();
japplet.repaint ();
revalidate () must be called first prior repaint ();
source : http://stackoverflow.com/questions/10119069/repaint-jpanel-doesnt-work-in-japplet
于 2013-07-23T17:13:55.757 に答える