关于SWING组件按钮提交事件显示不同的标签 [Java Java SE]

求助关于SWING组件按钮提交事件显示不同的标签 [Java Java SE]疑问为什么下面的程序当文本输入张三的时候

求助关于SWING组件按钮提交事件显示不同的标签 [Java Java SE]
疑问为什么下面的程序当文本输入张三的时候提交按钮,显示1,2号标签,然后我输入李四还是显示1,2号标签,而不是显示2,3号标签呢,正常李四显示的标签是2,3号标签


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.EmptyBorder;


public class s extends JFrame {

private JPanel contentPane;
private JTextField textField;
private JTextField textField_1;
private JLabel label;
private JLabel label_1;
private JLabel label_2;
private JLabel lblNewLabel;
private ImageIcon background;
JLabel labellogo;
private Label label_4;
private Label label_5;
private Label label_3;




/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
s frame = new s();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}

/**
* Create the frame.
*/
public s() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(null);
setContentPane(contentPane);

textField = new JTextField();
contentPane.add(textField, BorderLayout.NORTH);
textField.setColumns(10);

textField_1 = new JTextField();
textField_1.setBounds(67, 102, 162, 32);
contentPane.add(textField_1);
textField_1.setColumns(10);



JButton button = new JButton("请输入帐号");
//事件处理
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {


String str=textField_1.getText().trim();
if(str.equals("")){
JOptionPane.showMessageDialog(contentPane, "请输入帐号名字!");
}
else if(str.contains(" ")){
JOptionPane.showMessageDialog(contentPane,
"搜索关键字中请不要包含空格!");
}
else{
String rs="";

//如果输入张三显示1,2号标签,如果输入李四显示2,3号标签,其他帐号显示1,2,3号标签
if(str.equals("张三")){
rs="1,2";
}
else if(str.equals("李四")){
rs="2,3";
}
else{

rs="1,2,3";
}

String rss[]=rs.split(",");
int tx=130;
//这里会涉及到100个label标签,目前测试阶段只给与3个数字
label_3 = new Label("1"); //1号标签
label_4 = new Label("2"); //2号标签
label_5 = new Label("3");//3号标签
contentPane.add(label_3);
contentPane.add(label_4);
contentPane.add(label_5);
contentPane.updateUI();
label_3.setVisible(false);
label_4.setVisible(false);
label_5.setVisible(false);
Map map = new HashMap();
map.put("1", label_3);
map.put("2", label_4);
map.put("3", label_5);

// Set set =map.keySet();
// Iterator it=set.iterator();
// while(it.hasNext()){
// String s= (String) it.next();
// Label l=(Label)map.get(s);
//
// contentPane.add(l);


// l.setVisible(false);
//  
// }

//动态设置表格显示
for(int i=0;i<rss.length;i++){
tx+=27;
String n=rss[i];
System.out.println("n:"+n);
Label l=(Label)map.get(n);
l.setBackground(Color.RED);
l.setBounds(tx, 149, 21, 23);
l.setVisible(true);
//l.setBackground(Color.RED);
//l.setBounds(tx, 149, 21, 23);
//contentPane.add(l);
//Label label_3+rSS = new Label("1");
////new Label(rss[i]).setBackground(Color.RED);
////new Label(rss[i]).setBounds(tx, 149, 21, 23));
//contentPane.add(new Label("1").setBackground(Color.RED));
//labelteme="labelteme";

}

 


}


}
});

label_1 = new JLabel("本公司员工抽奖结果鼓励奖");
label_1.setBounds(68, 10, 279, 46);
contentPane.add(label_1);






label_2 = new JLabel("开奖记录:");
label_2.setBounds(68, 50, 279, 46);
contentPane.add(label_2);


button.setBounds(263, 102, 141, 23);
contentPane.add(button);

label = new JLabel("抽奖结果:");
label.setBounds(67, 140, 70, 32);
contentPane.add(label);







lblNewLabel = new JLabel("开发人员");
lblNewLabel.setBounds(67, 178, 331, 29);
contentPane.add(lblNewLabel);


background = new ImageIcon("c:/logo1.gif");//背景图片
labellogo = new JLabel(background);
labellogo.setBounds(80,200,background.getIconWidth(),background.getIconHeight());
contentPane.add(labellogo);



}
}




[解决办法]
你把 label 新建和添加的代码都写在了 actionPerformed() 里,
也就是说,你每次点按钮,都新建了三个label,
也就是说,
如果上次是“张三”,那上次那个设置为“visible”的 1 和 2 两个label还在那里
然后新建了三个label 1 2 3 , 如果这次是“李四”,那在上次 1 和 2 的相同位置又添加了两个label 2 和 3

重叠了。

由于有背景色,新加的 2 和 3 被 上次那个 1 和 2 挡住了,如果去掉背景色你就能看到重叠的数字。

修改: 把新建和添加 label 的代码从 actionPerformed() 方法拿出来就行了,另把 map 设计为成员变量

Java code
import java.awt.BorderLayout;import java.awt.Color;import java.awt.EventQueue;import java.awt.Label;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.border.EmptyBorder;public class s extends JFrame {  private JPanel contentPane;  private JTextField textField;  private JTextField textField_1;  private JLabel label;  private JLabel label_1;  private JLabel label_2;  private JLabel lblNewLabel;  private ImageIcon background;  JLabel labellogo;  private Label label_4;  private Label label_5;  private Label label_3;    private Map map;  /**   * Launch the application.   */  public static void main(String[] args) {    EventQueue.invokeLater(new Runnable() {      public void run() {        try {          s frame = new s();          frame.setVisible(true);        } catch (Exception e) {          e.printStackTrace();        }      }    });  }  /**   * Create the frame.   */  public s() {    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    setBounds(100, 100, 450, 300);    contentPane = new JPanel();    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));    contentPane.setLayout(null);    setContentPane(contentPane);    textField = new JTextField();    contentPane.add(textField, BorderLayout.NORTH);    textField.setColumns(10);    textField_1 = new JTextField();    textField_1.setBounds(67, 102, 162, 32);    contentPane.add(textField_1);    textField_1.setColumns(10);        label_3 = new Label("1"); // 1号标签    label_4 = new Label("2"); // 2号标签    label_5 = new Label("3");// 3号标签    contentPane.add(label_3);    contentPane.add(label_4);    contentPane.add(label_5);    map = new HashMap();    map.put("1", label_3);    map.put("2", label_4);    map.put("3", label_5);    JButton button = new JButton("请输入帐号");    // 事件处理    button.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {        String str = textField_1.getText().trim();        if (str.equals("")) {          JOptionPane.showMessageDialog(contentPane, "请输入帐号名字!");        } else if (str.contains(" ")) {          JOptionPane.showMessageDialog(contentPane, "搜索关键字中请不要包含空格!");        } else {          String rs = "";          // 如果输入张三显示1,2号标签,如果输入李四显示2,3号标签,其他帐号显示1,2,3号标签          if (str.equals("张三")) {            rs = "1,2";          } else if (str.equals("李四")) {            rs = "2,3";          } else {            rs = "1,2,3";          }          String rss[] = rs.split(",");          int tx = 130;          // 这里会涉及到100个label标签,目前测试阶段只给与3个数字                    label_3.setVisible(false);          label_4.setVisible(false);          label_5.setVisible(false);          // Set set =map.keySet();          // Iterator it=set.iterator();          // while(it.hasNext()){          // String s= (String) it.next();          // Label l=(Label)map.get(s);          //          // contentPane.add(l);          // l.setVisible(false);          //          // }          // 动态设置表格显示          for (int i = 0; i < rss.length; i++) {            tx += 27;            String n = rss[i];            System.out.println("n:" + n);            Label l = (Label) map.get(n);            l.setBackground(Color.RED);            l.setBounds(tx, 149, 21, 23);            l.setVisible(true);            // l.setBackground(Color.RED);            // l.setBounds(tx, 149, 21, 23);            // contentPane.add(l);            // Label label_3+rSS = new Label("1");            // //new Label(rss[i]).setBackground(Color.RED);            // //new Label(rss[i]).setBounds(tx, 149, 21, 23));            // contentPane.add(new Label("1").setBackground(Color.RED));            // labelteme="labelteme";          }                  }      }    });    label_1 = new JLabel("本公司员工抽奖结果鼓励奖");    label_1.setBounds(68, 10, 279, 46);    contentPane.add(label_1);    label_2 = new JLabel("开奖记录:");    label_2.setBounds(68, 50, 279, 46);    contentPane.add(label_2);    button.setBounds(263, 102, 141, 23);    contentPane.add(button);    label = new JLabel("抽奖结果:");    label.setBounds(67, 140, 70, 32);    contentPane.add(label);    lblNewLabel = new JLabel("开发人员");    lblNewLabel.setBounds(67, 178, 331, 29);    contentPane.add(lblNewLabel);    background = new ImageIcon("c:/logo1.gif");// 背景图片    labellogo = new JLabel(background);    labellogo.setBounds(80, 200, background.getIconWidth(),        background.getIconHeight());    contentPane.add(labellogo);  }}