我有一个扩展jApplet的类和三个扩展jpanel的类。现在,我正在尝试使用特定Jpanel从JButton中采取的操作切换这些jPanel。
问题:我能够在我的applet中加载/显示我在init()方法中从applet本身设置可见的第一个面板。但是,当我尝试从按钮单击jPanel表单时执行相同操作时,它不起作用。我面板关闭但添加的新面板不显示。
以下代码的代码上下文:
单击User_Login jpanel上的Change Password按钮,我想调用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");
}
}
}
答案 0 :(得分:1)
您应该在该ContentPane中放置一个CardLayout
,然后更改该CardLayout的可见面板,而不是直接将其放入您的applet ContentPane中,这是一个更简单的操作。
编辑示例
好的,我们考虑你想在你的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");
}
然后,当用户登录并且您必须更改活动面板时,请更改您的更改方法
public void Login()
{
CardLayout card = (CardLayout) content_pane.getLayout();
card.show(content_pane, "user_panel");
}
答案 1 :(得分: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