每次我点击一个按钮退出? (动作听众)

时间:2011-09-29 10:07:54

标签: java swing

这是我的代码

import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.applet.Applet;

class Panell implements ActionListener {
    JButton button;
    JButton buttonTwo;
    JButton buttonThree;
    JButton buttonFour;
    JButton buttonFive;
    JTextArea textArea;

    public static void main(String[] args) {
        Panell gui = new Panell ();
        gui.go();
    }

    void go() {
        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        panel.setBackground(Color.darkGray);
        panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));

        button = new JButton("Monday");
        buttonTwo = new JButton("Tuesday");
        buttonThree = new JButton("Wednesday");
        buttonFour = new JButton("Thursday");
        buttonFive = new JButton("Friday");
        textArea = new JTextArea();
        button.addActionListener(this);
        buttonTwo.addActionListener(this);
        buttonThree.addActionListener(this);
        buttonFour.addActionListener(this);
        buttonFive.addActionListener(this);

        panel.add(button);
        panel.add(buttonTwo);
        panel.add(buttonThree);
        panel.add(buttonFour);
        panel.add(buttonFive);

        frame.add(BorderLayout.CENTER, textArea);
        frame.getContentPane().add(BorderLayout.WEST, panel);
        frame.setSize(300,300);
        frame.setVisible(true);
    } 

    public void actionPerformed(ActionEvent event) {
        if(event.getSource() == button) {
            textArea.setText("I've been clicked!");
        } else {
            System.exit(1);
        }
        {
            if(event.getSource() == buttonTwo) {
                textArea.setText("herro");
            } else {
                System.exit(1);
            }
        }
    }
}

按下按钮时它会一直退出?任何想法?

以及如何添加更多动作侦听器?

2 个答案:

答案 0 :(得分:2)

只有当所有条件(按下按钮)都失败时,你应该退出(不是吗?)不是其中之一。
你可以使用类似的东西:

if(event.getSource() == button) {
    textArea.setText("I've been clicked!");
} else if(event.getSource() == buttonTwo) {
    textArea.setText("herro");
} else if(...
...//any other check
} else {
    System.exit(1); //button not found :(
}

答案 1 :(得分:0)

您的申请因“System.exit(1)”而关闭。

在这种情况下,比较“==”是正确的,因为您比较了对象引用。但是你总是要确定你是否比较引用或对象。因此,更改代码更安全:

event.getSource() == button

到这个

event.getSource().equals(button)

此外,你应该检查你的if:如果事件源不是“按钮”(星期一),你的“其他”退出你的应用程序。永远不会达到下一个比较(到buttonTwo)。

如果第一个比较符合,下一个比较将失败,并且下一个“else”(第二个比较)将再次退出您的应用程序。

将您的代码更改为以下内容:

public void actionPerformed(ActionEvent event) {
    if (event.getSource().equals(button)) {
        textArea.setText("I've been clicked!");
    } else if (event.getSource().equals(buttonTwo)) {
        textArea.setText("herro");
    } else {
        System.exit(1);
    }
}