ismail zaidi
ismail zaidi

Reputation: 21

Java Action Listener not working

I have two questions:

1 . why when I execute the code, when I click on the button P it doesn't show the println. 2. I have tried to make a background with JLabel it works fine but it doesn't cover all of the JFrame. I tried JFrame with try and catch and it doesn't display it.

JPanel L1 = new JPanel();
JButton P = new JButton("Open");

    JButton P1 = new JButton("Cancel");

    Dimension D = new Dimension(80 , 30);

    Container C = getContentPane();

    JLabel Label2 = new JLabel(new 




    super.setTitle("Ismail Application");
    //Buttons

    //Button 1
    P.setToolTipText("Click To Open");
    P.setPreferredSize(D);

    //Button 2
    P1.addActionListener(this);

    P1.setToolTipText("Click to exit program");

    P1.setPreferredSize(D);

    //Adding Components

    L1.add(P, BorderLayout.WEST);

    L1.add(P1, BorderLayout.EAST);

    add(L1, BorderLayout.SOUTH);

    P1.addActionListener(this);

    P.addActionListener(this);


             //Labels

    Label2.setLayout(null);

    Label2.setSize(400,300);

    Label2.setToolTipText("This is the Background");

    add(Label2, BorderLayout.NORTH);


}
public void actionPerformed (ActionEvent e)
    {
        if(e.getSource() == P)
        {
            System.out.println("not working");
        }
        if(e.getSource() == P1){

        }

    }

I hope you guys can help

Thanks

Upvotes: 0

Views: 16747

Answers (3)

nIcE cOw
nIcE cOw

Reputation: 24626

Since you are using Layout, then stop giving your personal Dimensions to the components.Add all setPreferredSize() thingies as comments. Better add your JLabel to the Center instead of North, so that it can fill the maximum area on the component. Moreover provide a complete code so that we can look into your ActionListener thing too. For the JLabel part, remove

add(Label2, BorderLayout.NORTH);

replace it with this

add(Label2, BorderLayout.CENTER);

And for your ActionListener part try this

public void actionPerformed(ActionEvent ae)
{
    JButton button = (JButton)ae.getSource();
    if (button.equals(P))
    {
        System.out.println("not working.");
    }
    else if (button.equals(P1))
    {
        System.out.println("working.");
    }
}

Hope that might help.

Regards

Upvotes: 2

Robin
Robin

Reputation: 36611

Since the code you posted does not compile and cannot be run by us, it is hard to say what is going on. See below for the most basic example of a JButton with an ActionListener attached to it, which prints something each time the button is pressed. Compare that with your code to find the differences, or adjust your code to a sscce.

import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class FrameWithButtonExample {

  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        JFrame frame = new JFrame( "TestFrame" );

        final JButton testButton = new JButton( "TestButton" );
        testButton.addActionListener( new ActionListener() {
          @Override
          public void actionPerformed( ActionEvent aActionEvent ) {
            //if check to match the code from the question, but not really needed
            if ( aActionEvent.getSource() == testButton ){
              System.out.println("TestButton pressed");
            }
          }
        } );
        frame.add( testButton );
        frame.pack();
        frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frame.setVisible( true );
      }
    } );
  }
}

Upvotes: 5

Mike Thomsen
Mike Thomsen

Reputation: 37506

You didn't show whether or not you implement ActionListener on the class. That said, you're better off doing this:

P.setActionCommand("P_BUTTON");

then

if (e.getActionCommand().equals("P_BUTTON"))

than the way you're doing it.

Upvotes: 3

Related Questions