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);
}

}

请高手指教?
建两个我知道可以!
我建一个是达到代码的重用性!
展开
 我来答
pingia
2010-06-02 · TA获得超过568个赞
知道小有建树答主
回答量:697
采纳率:100%
帮助的人:760万
展开全部
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函数也是一样的道理
tianjigeng
2010-06-02 · TA获得超过593个赞
知道小有建树答主
回答量:387
采纳率:0%
帮助的人:0
展开全部
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;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bd_fhw
2010-06-02 · 超过45用户采纳过TA的回答
知道答主
回答量:182
采纳率:0%
帮助的人:0
展开全部
任何编程中一个重要的原则是防止内存泄漏,当你确定一个对象无用时请销毁它或将占用的资源释放。
根据这个原则请重新思考你个问题!希望能解决你的问题!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
happyskysun
2010-06-02 · 超过17用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:41.7万
展开全部
你建立了一个密码框的对象,应该建立两个啊,就没有事啊,代码好好的改吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式