java图形用户界面问题?急!在线等!
这是子类,密码框的方法我调用的两次,但是只显示出来一次!packaget01;importjava.awt.Color;importjavax.swing.ImageIc...
这是子类,密码框的方法我调用的两次,但是只显示出来一次!
package t01;
import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
public class sign extends JFrame {
private JPanel jp = null;
private JPasswordField jpsw = null;
private JLabel jlpsw = null;
public sign(String title){
super(title);
setSize(600, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//返回用户在此窗体上发起 "close" 时执行的操作,退出应用程序后的默认窗口关闭操作
setIconImage(new ImageIcon("icon.gif").getImage());
//设置要作为此窗口图标显示的图像
setContentPane(getJp()); //把面板放到窗体上
}
public JPanel getJp(){
if(jp == null){
jp = new JPanel();
jp.setBackground(Color.lightGray);
jp.setLayout(null); //设置布局方式为自定义
jp.add(getJlpsw());
jp.add(getJpsw(80, 80, 120, 20));
jp.add(getJpsw(80, 110, 120, 20));
}
return jp;
}
//密码
public JLabel getJlpsw(){
if(jlpsw == null){
jlpsw = new JLabel();
jlpsw.setText("密 码:");
jlpsw.setBounds(30,80,120,20);
}
return jlpsw;
}
//密码框
public JPasswordField getJpsw(int a,int b,int c,int d){
if(jpsw == null){
jpsw = new JPasswordField();
jpsw.setBounds(a,b,c,d);
}
return jpsw;
}
}
测试类:
package t01;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
sign si=new sign("会员注册");
si.setVisible(true);
}
}
请高手指教?
建两个我知道可以!
我建一个是达到代码的重用性! 展开
package t01;
import java.awt.Color;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
public class sign extends JFrame {
private JPanel jp = null;
private JPasswordField jpsw = null;
private JLabel jlpsw = null;
public sign(String title){
super(title);
setSize(600, 500);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//返回用户在此窗体上发起 "close" 时执行的操作,退出应用程序后的默认窗口关闭操作
setIconImage(new ImageIcon("icon.gif").getImage());
//设置要作为此窗口图标显示的图像
setContentPane(getJp()); //把面板放到窗体上
}
public JPanel getJp(){
if(jp == null){
jp = new JPanel();
jp.setBackground(Color.lightGray);
jp.setLayout(null); //设置布局方式为自定义
jp.add(getJlpsw());
jp.add(getJpsw(80, 80, 120, 20));
jp.add(getJpsw(80, 110, 120, 20));
}
return jp;
}
//密码
public JLabel getJlpsw(){
if(jlpsw == null){
jlpsw = new JLabel();
jlpsw.setText("密 码:");
jlpsw.setBounds(30,80,120,20);
}
return jlpsw;
}
//密码框
public JPasswordField getJpsw(int a,int b,int c,int d){
if(jpsw == null){
jpsw = new JPasswordField();
jpsw.setBounds(a,b,c,d);
}
return jpsw;
}
}
测试类:
package t01;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
sign si=new sign("会员注册");
si.setVisible(true);
}
}
请高手指教?
建两个我知道可以!
我建一个是达到代码的重用性! 展开
4个回答
展开全部
if(jpsw == null){
jpsw = new JPasswordField();
jpsw.setBounds(a,b,c,d);
}
return jpsw;
主要是这里的问题 jpsw是类对象变量。第一次你jp.add(getJpsw(80, 80, 120, 20));
调用的时候 if语句是执行的 然后jpsw会指向一个JPasswordField的对象
当你第二次jp.add(getJpsw(80, 110, 120, 20));调用的时候 此时因为jpsw还是指向你第一次创建的那个JPasswordField对象 他不为空 if语句不会执行 返回的jpsw 还是刚才那个jpsw 其实你只增加了一个JPasswordField引用
我完全不知道 你用个全局变量和 if语句的必要性。。。
你将private JPasswordField jpsw = null; 去掉private关键字后放到getjpsw函数里面来就OK拉
getJlpsw函数也是一样的道理
jpsw = new JPasswordField();
jpsw.setBounds(a,b,c,d);
}
return jpsw;
主要是这里的问题 jpsw是类对象变量。第一次你jp.add(getJpsw(80, 80, 120, 20));
调用的时候 if语句是执行的 然后jpsw会指向一个JPasswordField的对象
当你第二次jp.add(getJpsw(80, 110, 120, 20));调用的时候 此时因为jpsw还是指向你第一次创建的那个JPasswordField对象 他不为空 if语句不会执行 返回的jpsw 还是刚才那个jpsw 其实你只增加了一个JPasswordField引用
我完全不知道 你用个全局变量和 if语句的必要性。。。
你将private JPasswordField jpsw = null; 去掉private关键字后放到getjpsw函数里面来就OK拉
getJlpsw函数也是一样的道理
展开全部
jpsw是成员变量,虽然调用了getJpsw两次,但是返回的是同一个jpsw对象,在往jp里add的时候是重复的,所以只存在一次。
为两个不同的文本输入框定义两个jpsw对象,再add到jp里,就可以了。
----------------------------------------
这样改改吧,定义一个map的成员变量,保存文本框名字和实际的对象,getJpsw方法改成:
public JPasswordField getJpsw(String fieldName, int a,int b,int c,int d){
JPasswordField jpsw = new JPasswordField();
map.put(fieldName, jpsw);
jpsw.setBounds(a,b,c,d);
return jpsw;
}
为两个不同的文本输入框定义两个jpsw对象,再add到jp里,就可以了。
----------------------------------------
这样改改吧,定义一个map的成员变量,保存文本框名字和实际的对象,getJpsw方法改成:
public JPasswordField getJpsw(String fieldName, int a,int b,int c,int d){
JPasswordField jpsw = new JPasswordField();
map.put(fieldName, jpsw);
jpsw.setBounds(a,b,c,d);
return jpsw;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
任何编程中一个重要的原则是防止内存泄漏,当你确定一个对象无用时请销毁它或将占用的资源释放。
根据这个原则请重新思考你个问题!希望能解决你的问题!
根据这个原则请重新思考你个问题!希望能解决你的问题!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你建立了一个密码框的对象,应该建立两个啊,就没有事啊,代码好好的改吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询