为什么当我在GUI中按A、B和C时,如果我先点击A再点击C,GUI不会改变,反之亦然。但如果我点击B,它将对所有操作都有效?我不明白为什么会这样,请各位指正错误,同时请尽可能通俗易懂地解释,因为我是初学者。谢谢。
package Experimental;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class EventListener2 extends JFrame implements ActionListener{
JButton a,b,c;
JLabel aa,bb,cc;
JPanel top, bottom;
EventListener2(){
super("Event Listener 2");
setSize(300,300);
setLayout(new FlowLayout());
a=new JButton("A");
aa = new JLabel("Button \"A\" was pressed");
b=new JButton("B");
bb = new JLabel("Button \"B\" was pressed");
c=new JButton("C");
cc = new JLabel("Button \"C\" was pressed");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
a.addActionListener(this);
b.addActionListener(this);
c.addActionListener(this);
top=new JPanel();
top.setLayout(new FlowLayout());
top.add(a);
top.add(b);
top.add(c);
bottom=new JPanel();
this.add(top);
this.add(bottom);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent event) {
// TODO Auto-generated method stub
Object source = event.getSource();
bottom.removeAll();
if (source==a){
bottom.add(aa);
System.out.println("a was pressed");
}
else if (source==b){
bottom.add(bb);
System.out.println("b was pressed");
}
else{
bottom.add(cc);
System.out.println("c was pressed");
}
this.setVisible(true);
}
public static void main(String[] args) {
EventListener2 a = new EventListener2();
}
}
actionPerformed(..)
方法表明bottom
面板应该使用CardLayout
,如 这个答案 所示。 - Andrew Thompson