您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何将动作侦听器设置为3个按钮

如何将动作侦听器设置为3个按钮

您正在寻找的是一条if-then-else if-then声明。

基本上,ActionListener像往常一样将都添加到所有三个按钮…

JButton startButton = new JButton("Start");
JButton stopButton = new JButton("Stop");
JButton pauseButton = new JButton("Pause");

startButton.addActionListener(this);
stopButton.addActionListener(this);
pauseButton.addActionListener(this);

然后提供if-else-if一系列条件以测试每种可能的情况(您期望的)

public void actionPerformed(ActionEvent e) {
    Calendar aCalendar = Calendar.getInstance();
    if (e.getSource() == startButton){
        start = aCalendar.getTimeInMillis();
        aJLabel.setText("Stopwatch is running...");
    } else if (e.getSource() == stopButton) {
        aJLabel.setText("Elapsed time is: " + 
                (double) (aCalendar.getTimeInMillis() - start) / 1000 );
    } else if (e.getSource() == pauseButton) {
        // Do pause stuff
    }
}

仔细查看if-then和if-then- else语句获取更多详细信息

与其尝试使用对按钮的引用,不如考虑使用代替的actionCommand属性AcionEvent,这意味着您将不需要引用原始按钮…

public void actionPerformed(ActionEvent e) {
    Calendar aCalendar = Calendar.getInstance();
    if ("Start".equals(e.getActionCommand())){
        start = aCalendar.getTimeInMillis();
        aJLabel.setText("Stopwatch is running...");
    } else if ("Stop".equals(e.getActionCommand())) {
        aJLabel.setText("Elapsed time is: " + 
                (double) (aCalendar.getTimeInMillis() - start) / 1000 );
    } else if ("Pause".equals(e.getActionCommand())) {
        // Do pause stuff
    }
}

这也意味着,你可以重复使用ActionListener的东西像JMenuItemS,只要他们有相同的actionCommand

话虽如此,我鼓励你不要遵循这种范例。通常,我鼓励您使用Actions API,但是对于您现在所处的位置,这可能有点太先进了,相反,我鼓励您利用Java的匿名类支持,例如… 。

startButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        start = aCalendar.getTimeInMillis();
        aJLabel.setText("Stopwatch is running...");
    }
});
stopButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        aJLabel.setText("Elapsed time is: "
                + (double) (aCalendar.getTimeInMillis() - start) / 1000);
    }
});
pauseButton.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        // Do pause stuff
    }
});

这样可以将每个按钮的职责隔离为一个ActionListener,从而使您更容易查看正在发生的事情,并在需要时轻松进行修改,而不必担心或影响其他按钮。

它还消除了维护对按钮的引用的需要(因为可以通过ActionEvent getSource属性获得该引用)

其他 2022/1/1 18:30:16 有363人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶