2010-06-15 3 views
1

JFrameWithPanel 추상적하지 구현되지 않고 공용 클래스 JFrameWithPanel이 JFrame의이 된 ActionListener의 ActionListener는

I 돈 구현 확장 java.awt.event.ActionListener에서 추상 메소드의 actionPerformed (java.awt.event.ActionEvent의)를 대체하지 않습니다 이 코드를 얻지 못한다. Book과 Java 사이트는 이것이 메소드의 문법임을 알려주지 만이 오류는 계속해서 나타납니다.

import javax.swing.*; 
import javax.swing.JOptionPane; 
import java.awt.*; 
import java.awt.event.*; 
import java.lang.Math.*; 
import java.lang.Integer.*; 
import java.util.*; 
import java.util.Random; 
import java.io.*; 
import java.text.*; 
import java.text.DecimalFormat.*; 

public class JFrameWithPanel extends JFrame implements ActionListener 
{ 
JButton button = new JButton("Exit"); 

public JFrameWithPanel() 
{ 
    super("JFrame with Panel"); 

    JComboBox packageChoice = new JComboBox(); 
    packageChoice.addItem("A+ Certification"); 
    packageChoice.addItem("Network+ Certification "); 
    packageChoice.addItem("Security+ Certifictation"); 
    packageChoice.addItem("CIT Full Test Package"); 

    packageChoice.addActionListener(this); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    JPanel pane = new JPanel(); 
    pane.add(button); 
    pane.add(packageChoice); 
    setContentPane(pane); 
    setSize(200,100); 
    setVisible(true); 

} 
} 

는 나중에

public class CreateJFrameWithPanel 
{ 
public static void main(String[] args) 
{ 
    JFrameWithPanel panel = new JFrameWithPanel(); 
} 
} 
+0

'JFrame '과 같은 클래스를 불필요하게 확장하는 것은 나쁜 생각입니다. 무작위 인터페이스 (익명 내부 클래스 사용)를 구현합니다. Swing (및 AWT)은 AWT "EDT"스레드에서 사용해야하므로 main에 상용구가 필요합니다. 다른 책을 원할 수도 있습니다. –

답변

3

클래스는 ActionListener 인터페이스를 구현합니다.

public void actionPerformed(ActionEvent) 

그러나, 당신이 게시 한 클래스 정의하면 컴파일 오류를보고있다, 따라서 왜이 방법을 포함하지 않는다 : 이것은 방법을 구현해야한다는 것을 의미합니다. 코드를 해결하려면 다음 방법을 추가하려고 :

public void actionPerformed(ActionEvent evt) { 
    Object obj = packageChoice.getSelectedItem(); 
    JOptionPane.showMessageDialog(this, "You selected: " + obj); 
} 
+0

getSelectionItem()에 오류가 발생했습니다. –

+0

"getSelectedItem()"(수정되지 않음)을 읽었어야합니다. 오류에 대한 자세한 정보를 제공해야합니다. 그렇지 않으면 문제를 진단하기가 어렵거나 불가능 해집니다. 또한이 유형의 컴파일 오류가 발생하면 먼저 JDK API를 검사하여 클래스에 메소드가 있는지 (JComboBox) 확인하십시오. 희망이 도움이됩니다. – Adamski

+0

좋은 답변입니다. 다음은 몇 가지 추가 힌트입니다. Eclipse를 사용 중이면 왼쪽에 "X"오류가 표시됩니다. 이를 클릭하면 재정의하려는 메소드의 프레임 워크를 추가하여 문제를 해결할 수 있습니다. 또한 Implements 대신 Extends를 사용하는 경우 메서드 앞에 @override를 사용해야합니다. @override는 메서드 시그니처가 올바르지 않은 경우 경고합니다 (이미 구현 한 경우 오류가 발생하기 때문에 구현할 필요는 없습니다. 그러나 오류가 발생하지 않았으므로 청취자는 결코 실행되지 않습니다) –

1

implements ActionListener이 클래스는 ActionListener 인터페이스에 정의 된 방법을 정의해야한다는 것을 의미합니다. 하나의 방법이 있습니다 :

void actionPerformed(java.awt.event.ActionEvent); 

따라서이 방법을 사용해야합니다. 버튼에 액션 리스너가 필요하기 때문에 필요합니다.

이 방법에서는 단추를 클릭 할 때 수행 할 작업을 정의합니다.