2
votes

JFrameWithPanel is not abstract and does not override abstract method actionPerformed(java.awt.event.ActionEvent) in java.awt.event.ActionListener public class JFrameWithPanel extends JFrame implements ActionListener

I Don't get this code. Book and Java site tells me this is the syntax for the method, but again this error shows up constantly.

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);

 }
}

then later

public class CreateJFrameWithPanel
{
 public static void main(String[] args)
 {
  JFrameWithPanel panel = new JFrameWithPanel();
 }
}
2
Note that extending classes, such as JFrame unnecessarily is a bad idea. As is implementing random interfaces (use anonymous inner classes). Swing (and AWT) should be used from the AWT "EDT" thread, and so needs boilerplate in main. You may want to get a different book.Tom Hawtin - tackline

2 Answers

5
votes

The class implements the ActionListener interface. This means that it must implement a method:

public void actionPerformed(ActionEvent)

However, the class definition you've posted does not include this method, hence why you are seeing a compilation error. To fix the code, try adding the following method:

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

implements ActionListener means that your class must defined the methods that are defined in the ActionListener interface. It has one method:

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

So you must either have this method. You need it, because your button needs an action listener.

In that method you define what happens when the button is clicked.