Frage

I already got some help on this, but now when I press the buttons, nothing happens. I want text to show up when you click a button. If it is a layout problem, which one should I use? FlowLayout does not work as well with this program, as it distorts the buttons.

import java.awt.*;
import java.awt.event.*;

public class Option3 extends Frame implements WindowListener,ActionListener
{
    Label l1;
    Label l2;
    Label l3;
    Button b1;
    Button b2;
    Button b3;
    public static void main(String[] args)
    {
        Option3 o3 = new Option3("Press a Button");
        o3.setSize(700,350);
        o3.setVisible(true);
    }
    public Option3(String option3)
    {
        super(option3);
        setLayout(null);
        addWindowListener(this);

        Label l1 = new Label();
        l1 = new Label();
        l1.setBounds(50,150,125,50);
        l1.setVisible(true);
        add(l1);

        Label l2 = new Label();
        l2 = new Label();
        l2.setBounds(275,150,125,50);
        l2.setVisible(true);
        add(l2);

        Label l3 = new Label();
        l3 = new Label();
        l3.setBounds(500,150,125,50);
        l3.setVisible(true);
        add(l3);

        Button b1 = new Button();
        b1 = new Button();
        b1.addActionListener(this);
        b1.setBounds(25,100,175,175);
        add(b1);

        Button b2 = new Button();
        b2 = new Button();
        addWindowListener(this);
        b2.addActionListener(this);
        b2.setBounds(250,100,175,175);
        add(b2);

        Button b3 = new Button();
        b3 = new Button();
        b3.addActionListener(this);
        b3.setBounds(475,100,175,175);
        add(b3);
    }
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == b1)
        {
            l1.setText("You pressed button 1.");
        }
        else if (e.getSource() == b2)
        {
            l2.setText("You pressed button 2.");
        }
        else if (e.getSource() == b3)
        {
            l3.setText("You pressed button 3.");
        }
    }
    public void windowClosing(WindowEvent e)
    {
        dispose();
        System.exit(0);
    }
    public void windowActivated(WindowEvent e) {}
    public void windowClosed(WindowEvent e) {}
    public void windowDeactivated(WindowEvent e) {}
    public void windowDeiconified(WindowEvent e) {}
    public void windowIconified(WindowEvent e) {}
    public void windowOpened(WindowEvent e) {}
}
War es hilfreich?

Lösung

public void actionPerformed(ActionEvent e) {
    if (e.getSource() == b1) {
        // do stuff
    } else if (e.getSource() == b2) {
        // do other stuff
    }
}

e.getSource() returns the object reference that triggered the event.

Andere Tipps

For this you should use the actionCommand:

//after object creation:
firstButton.setActionCommand("upper");
firstButton.addActionListener(this);// if this object is the listener
secondButton.addActionListener(this);// if this object is the listener
secondButton.setActionCommand("lower");

And then in your actionPerformed():

public void actionPerformed(ActionEvent e) {
  String command = event.getActionCommand();
  if("upper".equals(command)){
    //Do something
  } else if("lower".equals(command)){
    //Do something
  }
}

First of all, I prefer Swing over AWT. The following code shows a JFrame with 3 buttons. If you click a button, it would show a dialog box telling which button you clicked.

I've used Lambda Expressions. So, you must have jdk8 to run the following code. Don't rate down if this code doesn't work for you. Just go & grab jdk8.

If you're not comfortable with Lambda Expression. Then follow these instruction:-

Make an inner class ListenForButton implements ActionListener .
Write logics in overriden method definition. Then add this listener to your button as
b1.addActionListener(new ListenForButton())


import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

public class Option3 extends JFrame {

    JButton b1, b2, b3;
    JPanel jp1;

    private void initComponents() {
        jp1 = new JPanel();
        add(jp1);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        b1 = new JButton("Button1");
        b1.addActionListener(e -> {
            JOptionPane.showMessageDialog(this, "Button1 clicked");
        });
        jp1.add(b1);

        b2 = new JButton("Button2");
        b2.addActionListener(e -> {
            JOptionPane.showMessageDialog(this, "Button2 clicked");
        });
        jp1.add(b2);

        b3 = new JButton("Button3");
        b3.addActionListener(e -> {
            JOptionPane.showMessageDialog(this, "Button3 clicked");
        });
        jp1.add(b3);
        pack();

    }

    public static void main(String[] args) {
        new Option3("Press a Button").setVisible(true);
    }

    public Option3(String option3) {
        super(option3);
        initComponents();
        this.setLocationRelativeTo(null);
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top