Bryce Caro
Bryce Caro

Reputation: 65

Why won't my GUI work properly?

Why is it that when the GUI I can press A, B, and C but if I click A and then C it (the GUI) doesn't change and vice versa but if I click B it will work for all? I don't understand? Please if anyone notices any mistakes or something let me know. And ps I'm a beginner so please if you can explain in layman's terms. Thank you

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

}

Upvotes: 4

Views: 94

Answers (1)

Lukas Rotter
Lukas Rotter

Reputation: 4188

Change your actionPerformed method into this:

public void actionPerformed(ActionEvent event) {
    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");
    }
    bottom.revalidate();
    bottom.repaint();
    this.setVisible(true);
}

Upvotes: 5

Related Questions