首页 > 解决方案 > 我在事件处理方面做的每一件事都是正确的。但是,我遗漏了一些东西。请问这是什么?

问题描述

我正在尝试编写一个计算圆的面积和周长的程序。该程序应该有两个按钮。一种用于计算过程。另一个是关闭程序。我在实现 ActionListener 时遗漏了一些东西。你能帮帮我吗?

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

public class Circle extends JFrame {

    private JLabel radiusLabel, areaLabel, perimeterLabel ;
    private JTextField radiusText, areaText, perimeterText;
    private JButton calculateButton, exitButton;
    
    private CalculateButtonHandler calculateButtonHandler;
    private ExitButtonHandler exitButtonHandler;
    
    public Circle(){
        setLayout(new FlowLayout());
        radiusLabel = new JLabel("radius");
        areaLabel = new JLabel("Area");
        perimeterLabel = new JLabel("Perimeter");
        
        radiusText = new JTextField(10);
        areaText = new JTextField(10);
        perimeterText = new JTextField(10);
        
        calculateButton = new JButton("Calculate") ;
        calculateButtonHandler = new CalculateButtonHandler();
    calculateButtonHandler.addActionListener(calculateButtonHandler);
        exitButton = new JButton("Close") ;
        exitButton.addActionListener(exitButtonHandler);
        
        setTitle("Area and Perimeter of a circle");
        Container pane = getContentPane();
        pane.setLayout(new GridLayout(4, 2));
        
        pane.add(radiusLabel);
        pane.add(radiusText);
        pane.add(areaLabel);
        pane.add(areaText);
        pane.add(perimeterLabel);
        pane.add(perimeterText);
        pane.add(calculateButton);
        pane.add(exitButton);
        
        setSize(WIDTH, HEIGHT);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    class CalculateButtonHandler implements ActionListener{

        public CalculateButtonHandler(ActionEvent e) {
            double radius, area, perimeter ;
            
            radius = Double.parseDouble(radiusText.getText());
            area = radius * radius * 3.14 ;
            perimeter = 2 * radius * 3.14 ;
            
            areaText.setText("" + area);
            perimeterText.setText("" + perimeter);
        }
    }
    
        private class ExitButtonHandler implements ActionListener {

        public ExitButtonHandler() {
            System.exit(0);
        }
    }
    
    public static void main(String[] args) {
        Circle c = Circle();
    }
}

标签: javaswingjframeactionlistener

解决方案


我在实现 ActionListener 时遗漏了一些东西。

class CalculateButtonHandler implements ActionListener{

    public CalculateButtonHandler(ActionEvent e) {
        double radius, area, perimeter ;
        
        radius = Double.parseDouble(radiusText.getText());
        area = radius * radius * 3.14 ;
        perimeter = 2 * radius * 3.14 ;
        
        areaText.setText("" + area);
        perimeterText.setText("" + perimeter);
    }
}

在您的代码中,您说您正在实现“ActionListener”,但您没有。您没有实现该actionPerformed(...)方法。

public CalculateButtonHandler(ActionEvent e) {

应该:

public void actionPerformed(ActionEvent e) {

推荐阅读