java小程序 按钮事件显示panel,为什么我要最大化一下才能显示

publicclasskaoshi2extendsAppletimplementsActionListener{Buttonb1=newButton("添加社员");Bu... public class kaoshi2 extends Applet implements ActionListener{ Button b1 = new Button("添加社员"); Button b5 = new Button("添加信息"); Panel pall = new Panel(new BorderLayout()); Panel p0 = new Panel(); Panel p1 = new Panel(); Label l1 = new Label("社员代码:"); Label l2 = new Label("社员名称:"); Label l3 = new Label("社员生日:"); TextField tf1 = new TextField(4); TextField tf2 = new TextField(4); TextField tf3 = new TextField(4); public void init(){ b1.addActionListener(this); p0.add(b1); p1.add(l1); p1.add(tf1); p1.add(l2); p1.add(tf2); p1.add(l3); p1.add(tf3); p1.add(b5); pall.add(p0,BorderLayout.NORTH); this.add(pall); this.setVisible(true); } public void actionPerformed(ActionEvent aa1) { String ss1 = aa1.getActionCommand(); if(ss1=="添加社员"){ repaint(); pall.add(p1,BorderLayout.SOUTH); p1.setVisible(true); } }} 展开
 我来答
紫薇参星
科技发烧友

2016-06-07 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3570万
展开全部

因为你最大化applet等于重新布置applet中的组件,而validate();语句有相同的作用。

所以在actionPerformed函数中,注释掉repaint();和p1.setVisible(true);语句,加上

validate();语句就行了。

完整的Java语言程序如下:

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class kaoshi2 extends Applet implements ActionListener{
 Button b1 = new Button("添加社员");
 Button b5 = new Button("添加信息");
 Panel pall = new Panel(new BorderLayout());
 Panel p0 = new Panel();
 Panel p1 = new Panel();
 Label l1 = new Label("社员代码:");
 Label l2 = new Label("社员名称:");
 Label l3 = new Label("社员生日:");
 TextField tf1 = new TextField(4); 
 TextField tf2 = new TextField(4);
 TextField tf3 = new TextField(4);

 public void init(){
 b1.addActionListener(this);
 p0.add(b1);
 p1.add(l1); 
 p1.add(tf1);
 p1.add(l2);
 p1.add(tf2);
 p1.add(l3);
 p1.add(tf3);
 p1.add(b5);
 pall.add(p0,BorderLayout.NORTH);
 this.add(pall);
 this.setVisible(true);
 }
 public void actionPerformed(ActionEvent aa1) {
 String ss1 = aa1.getActionCommand();
 if(ss1=="添加社员"){
 //repaint();
 pall.add(p1,BorderLayout.SOUTH);
 //p1.setVisible(true);
 validate();//这句将重新布置applet中的组件
 }
 }
}
匿名用户
2017-10-10
展开全部
public void init(){
p1.add(l1); p1.add(tf1); p1.add(l2); p1.add(tf2); p1.add(l3); p1.add(tf3); p1.add(b5);

p0.add(b1);
pall.add(p0, BorderLayout.NORTH);
this.add(pall);
this.setVisible(true);
b1.addActionListener(this);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
无二肆玖一
2016-06-07 · TA获得超过1046个赞
知道小有建树答主
回答量:850
采纳率:76%
帮助的人:368万
展开全部
public void actionPerformed(ActionEvent aa1) {
String ss1 = aa1.getActionCommand();
if (ss1 == "添加社员") {
pall.add(p1, BorderLayout.SOUTH);
this.validate();
}
}

此方法作以上更改即可

validate
public void validate()
验证此容器及其所有子组件。
使用 validate 方法会使容器再次布置其子组件。已经显示容器后,在修改此容器的子组件的时候(在容器中添加或移除组件,或者更改与布局相关的信息),应该调用上述方法。
如果此 Container 无效,则此方法将调用 validateTree 方法,并将此 
Container 标记为有效。否则不执行任何动作。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式