Java Action Listener не работает - PullRequest
0 голосов
/ 29 января 2012

У меня два вопроса:

1.почему, когда я выполняю код, когда я нажимаю на кнопку P, он не показывает println.2. Я попытался сделать фон с JLabel, он работает нормально, но не охватывает весь JFrame.Я попробовал JFrame с try and catch, и он не отображается.

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){

        }

    }

Я надеюсь, что вы, ребята, можете помочь

Спасибо

Ответы [ 3 ]

5 голосов
/ 29 января 2012

Поскольку размещенный вами код не компилируется и не может быть запущен нами, трудно сказать, что происходит. Ниже приведен наиболее простой пример JButton с прикрепленным к нему ActionListener, который печатает что-то при каждом нажатии кнопки. Сравните это с вашим кодом, чтобы найти различия, или измените код на 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 );
      }
    } );
  }
}
3 голосов
/ 29 января 2012

Вы не показали, реализуете ли вы ActionListener в классе. Тем не менее, вам лучше сделать это:

P.setActionCommand("P_BUTTON");

тогда

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

чем то, как ты это делаешь.

2 голосов
/ 29 января 2012

Поскольку вы используете Layout, прекратите давать ваши личные измерения компонентам. Добавьте все setPreferredSize () в качестве комментариев.Лучше добавьте свой JLabel в центр, а не на север, чтобы он мог заполнить максимальную площадь компонента.Более того, предоставьте полный код, чтобы мы могли посмотреть и на ваш ActionListener.Для части JLabel удалите

add(Label2, BorderLayout.NORTH);

, замените ее на эту

add(Label2, BorderLayout.CENTER);

А для вашей части ActionListener попробуйте это

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.");
    }
}

Надеюсь, что это может помочь.

С уважением

...