2016-08-04 1 views
-2

그래서 나는 기본적인 자바 GUI 계산기를위한 튜토리얼을 따라왔다. 어떤 이유로 든 Calculate 버튼을 클릭하면 콘솔에 많은 오류가 표시됩니다. 이 문제를 어떻게 해결할 수 있습니까?단추 핸들러가 작동하지 않습니다. 기본 자바 사각형 계산기

코드 :

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

actionPerformed에 @Override의 주석을 추가하고 추상 메소드 – Li357

+0

@AndrewL과 동일한 서명 및 매개 변수를 사용하는지 확인하십시오. Override를 추가했는데 프로그램에 아무 것도하지 않았습니다. – lmckenz

답변

0

, "액션 전자"에서 매개 변수를 변경 모두 당신의 CalculateButtonHandler에서 "의 ActionEvent 전자"와 ExitButtonHandle 클래스.

ActionListener 인터페이스 메서드 세부 정보를 살펴보면 actionPerformed 메서드는 ActionEvent를 매개 변수로 사용한다는 것을 알 수 있습니다. 클래스에 인터페이스를 구현 중이므로이 메서드를 재정의해야합니다.

+0

나는 자바에 익숙하지 않다. 이 변화가 필요한 이유를 설명 할 수 있습니까? – lmckenz

+0

하위 클래스의 메서드를 올바르게 재정의하려면 수퍼 클래스 메서드와 동일한 매개 변수가 있어야합니다. 당신은 같은 매개 변수를 가지지 않았으므로 메서드는 그 일을하지 않았습니다. – Li357

관련 문제