2016-08-04 3 views
-2

私は基本的なJava GUIの計算機のチュートリアルに従っています。何らかの理由で、[計算]ボタンをクリックすると、コンソールには巨大なエラーのリストが表示されます。どうしたらいいですか?ボタンハンドラが機能しません。基本的なJavaの長方形の計算機

コード:

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

public class RectangleProgram extends JFrame { 

private static final int WIDTH = 400; 
private static final int HEIGHT = 300; 

private JLabel lengthL, widthL, areaL; 
private JTextField lengthTF, widthTF, areaTF; 
private JButton calculateB, exitB; 

//Button handlers 
private CalculateButtonHandler cbHandler; 
private ExitButtonHandler ebHandler; 

public RectangleProgram(){ 
    lengthL = new JLabel("Enter the length: ", SwingConstants.RIGHT); 
    widthL = new JLabel("Enter the width: ", SwingConstants.RIGHT); 
    areaL = new JLabel("Area: ", SwingConstants.RIGHT); 

    lengthTF = new JTextField(10); 
    widthTF = new JTextField(10); 
    areaTF = new JTextField(10); 


    //New buttons 

    calculateB = new JButton("Calculate"); 
    cbHandler = new CalculateButtonHandler(); 
    calculateB.addActionListener(cbHandler); 
    exitB = new JButton("Exit"); 
    ebHandler = new ExitButtonHandler(); 
    exitB.addActionListener(ebHandler); 

    setTitle("Sample Title: Area of a rectangle"); 
    Container pane = getContentPane(); 
    pane.setLayout(new GridLayout(4, 2)); 

    //Adding wings and things... well just things... no wings :(

    pane.add(lengthL); 
    pane.add(lengthTF); 
    pane.add(widthL); 
    pane.add(widthTF); 
    pane.add(areaL); 
    pane.add(areaTF); 
    pane.add(calculateB); 
    pane.add(exitB); 

    setSize(WIDTH, HEIGHT); 
    setVisible(true); 
    setDefaultCloseOperation(EXIT_ON_CLOSE); 

} 


private class CalculateButtonHandler implements ActionListener{ 
    public void actionPerformed(Action e){ 
     double width, length, area; 

     length = Double.parseDouble(lengthTF.getText()); 
     width = Double.parseDouble(widthTF.getText()); 
     area = length * width; 

     areaTF.setText("" + area); 
    } 
} 

public class ExitButtonHandler implements ActionListener{ 

    public void actionPerformed(Action e){ 
     System.exit(0); 

    } 
} 

public static void main(String[] args){ 
    RectangleProgram rectObj = new RectangleProgram(); 
} 

}

エラー:あなたのactionPerformedメソッドで

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation >problem: The type RectangleProgram.CalculateButtonHandler must implement the >inherited abstract method ActionListener.actionPerformed(ActionEvent)

at >RectangleProgram$CalculateButtonHandler.actionPerformed(RectangleProgram.java:5>9) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$500(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at >java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(U>nknown Source) at >java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(U>nknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at >java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(U>nknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source)

+0

コードとエラー*を掲載してください*。 – Li357

+1

@Overrideの注釈をactionPerformedに配置し、抽象メソッド – Li357

+0

@AndrewLと同じシグネチャとパラメータを持つことを確認します。オーバーライドを追加し、プログラムに何もしませんでした – lmckenz

答えて

0

、 "アクションE" から、あなたのパラメータを変更する両方のあなたのCalculateButtonHandlerで "のActionEvent E" へとExitButtonHandleクラス。

インターフェイスメソッドの詳細ActionListenerを見ると、メソッドactionPerformedがActionEventをパラメータとして受け取ることに気付くでしょう。クラスにインターフェイスを実装しているので、メソッドをオーバーライドする必要があります。

+0

私はかなりJavaに新しいです。なぜこの変更を行う必要があるのか​​説明できますか? – lmckenz

+0

サブクラス内のメソッドを正しくオーバーライドするには、スーパークラスメソッドと同じパラメータが必要です。あなたは同じパラメータを持っていなかったので、メソッドはそれをしませんでした。 – Li357

関連する問題