2011-06-14 41 views
0

我有一个扩展了jApplet的类和三个扩展jpanel的类。现在,我正试图将这些jPanels从JButtons中采取的操作与特定的Jpanel切换。Java JApplet - 尝试切换在外部类中创建的JPanel

问题:我能够加载/显示我的小程序中的第一个面板,该小程序在init()方法中从applet本身可见。但是,当我尝试从按钮单击jPanel窗体时,它不起作用。我面板关闭,但添加的新面板不显示。下面的代码的

代码上下文:

  1. 应用。 java是applet类
  2. User_Login。 Java是JPanel类(1)
  3. Reset_Password.java是JPanel类(2)

上的USER_LOGIN的JPanel更改密码按钮的点击,我想调用的Reset_Password的JPanel。

代码如下。任何帮助,高度赞赏

Application.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"); 
    } 
} 
} 

回答

1

,而不是直接在你的applet的contentPane把那么,你应在该ContentPane中放入CardLayout,然后更改visib该CardLayout的面板,这是一个更简单的操作。

编辑一个例子

OK,让我们考虑要放CardLayout在你的contentPane,那么所有其它面板添加到它。

对于这一点,你只需改变你的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"); 

} 

然后,当用户登录时,你必须改变你的活动面板,改变你的更改方法这样

public void Login() 
{ 
    CardLayout card = (CardLayout) content_pane.getLayout(); 
    card.show(content_pane, "user_panel"); 
} 
+0

感谢您的快速回答,您可以举一个快速的例子来说明如何去做? – Lokesh 2011-06-14 09:08:12

+0

@Lokesh希望互联网绝对没有关于CardLayout使用的内容,也没有[StackOverflow](http://stackoverflow.com/search?q=java+cardlayout)。 – Riduidel 2011-06-14 09:29:11

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