方法…未定义类型JFrame

我正在尝试用两个菜单列表制作一个gui,每个菜单中有3个项目。 我的问题是,当我点击一个项目时,我收到一个错误“方法displayList(int,AirplaneList)未定义类型JFrame”

AirplaneController.java的代码:

import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JFrame; import javax.swing.JOptionPane; import java.util.StringTokenizer; public class AirplaneController implements ActionListener{ public static StringTokenizer myTokens; //Declares a string tokenizer. public static String[] animals; public static int i;//Total including error. public static int a; //Total strings final static String[] DATA = {... }; final int Cargo = 0; final int Passenger = 1; final int Business = 2; final int All= 4; int count=0; AirplaneList close= new AirplaneList(); AirplaneList end=new AirplaneList(); CargoJet Cairplanes[]= new CargoJet[5]; BusinessJet Bairplanes[]= new BusinessJet[5]; PassengerJet Pairplanes[]= new PassengerJet[5]; JFrame gui; /** * One-argument constructor that sets the default JFrame and sets * to listen on buttons of that frame. * @param frame */ public AirplaneController(JFrame frame) { gui = frame; //gui.setButtonListener; } public void runList(){ Airplane parts2 []= new Airplane[8]; String hate[]= new String [80]; //AirplaneList close= new AirplaneList(); i=0; animals = new String[80]; for(int i=0; i<8; i++){ myTokens = new StringTokenizer(DATA[i],","); while (myTokens.hasMoreTokens()) { animals[a]=myTokens.nextToken(); hate[a]=animals[a]; a++; } } a=0; int k=0; int z=0; int d=0; for(i=0; i<80; i+=10){ if(hate[i].equals("B")){ Bairplanes[k]= new BusinessJet(hate[i],hate[i+1],hate[i+2],hate[i+3],hate[i+4],hate[i+5],hate[i+6],hate[i+7],hate[i+8],hate[i+9]); parts2[d]=Bairplanes[k]; d++; k++; count++; } if(hate[i].equals("C")){ Cairplanes[a]= new CargoJet(hate[i],hate[i+1],hate[i+2],hate[i+3],hate[i+4],hate[i+5],hate[i+6],hate[i+7],hate[i+8],hate[i+9]);// hate[i]="Catastrophy"; parts2[d]=Cairplanes[k]; d++; a++; count++; } if(hate[i].equals("P")){ Pairplanes[z]= new PassengerJet(hate[i],hate[i+1],hate[i+2],hate[i+3],hate[i+4],hate[i+5],hate[i+6],hate[i+7],hate[i+8],hate[i+9]);// hate[i]="Catastrophy"; parts2[d]=Pairplanes[k]; d++; z++; count++; } } for(i=0; i<8; i++){ System.out.println(parts2[i]+" Parts"); close.append(parts2[i]); } System.out.println(close); } public void createList(int selection) { int numPlanes = DATA.length; AirplaneList list = new AirplaneList(); Airplane parts2 []= new Airplane[8]; String hate[]= new String [80]; //AirplaneList close= new AirplaneList(); i=0; animals = new String[80]; for(int i=0; i<8; i++){ myTokens = new StringTokenizer(DATA[i],","); while (myTokens.hasMoreTokens()) { animals[a]=myTokens.nextToken(); hate[a]=animals[a]; a++; } } a=0; int k=0; int z=0; int d=0; for(i=0; i<80; i+=10){ if(hate[i].equals("B")){ Bairplanes[k]= new BusinessJet(hate[i],hate[i+1],hate[i+2],hate[i+3],hate[i+4],hate[i+5],hate[i+6],hate[i+7],hate[i+8],hate[i+9]); parts2[d]=Bairplanes[k]; d++; k++; count++; } if(hate[i].equals("C")){ Cairplanes[a]= new CargoJet(hate[i],hate[i+1],hate[i+2],hate[i+3],hate[i+4],hate[i+5],hate[i+6],hate[i+7],hate[i+8],hate[i+9]);// hate[i]="Catastrophy"; parts2[d]=Cairplanes[k]; d++; a++; count++; } if(hate[i].equals("P")){ Pairplanes[z]= new PassengerJet(hate[i],hate[i+1],hate[i+2],hate[i+3],hate[i+4],hate[i+5],hate[i+6],hate[i+7],hate[i+8],hate[i+9]);// hate[i]="Catastrophy"; parts2[d]=Pairplanes[k]; d++; z++; count++; } } for (int i = 0; i < numPlanes; i++) { switch (selection) { case Business: list.append(Bairplanes[i]); break; case Passenger: list.append(Pairplanes[i]); break; case Cargo: list.append(Cairplanes[i]); default: list.insert(parts2[i]); } gui.displayList(selection, list); // PROBLEM HERE!! } } //@Override /** * Create a LinkedList of airplane objects either by append, prepend or insert. * And display the LinkedList on the GUI. * * @param selection given order of the LinkedList * 0 for APPEND, 1 for PREPEND, 2 for INSERT */ /*public AirplaneList createList(int selection) { gui.displayList(); if(selection==All) return close; return close; }*/ //gui.displayList(selection, close.toString()); @Override public void actionPerformed(ActionEvent arg0) { String item = arg0.getActionCommand(); if (item.equals("Start")){ createList(All); } else if(item.equals("Clear")){ } else if (item.equals("Passenger")){ createList(Passenger); } else if( item.equals("Business")){ createList(Business); } else if( item.equals("Cargo")){ createList(Cargo); } else System.exit(0); } } 

问题出在这里: gui.displayList(selection, list); 并创建此错误:线程“AWT-EventQueue-0”中的exceptionjava.lang.Error:未解决的编译问题:未定义类型JFrame的方法displayList(int,AirplaneList)

这是AirplaneGUI.java的当前代码:

 import java.awt.*; import javax.swing.*; import javax.swing.border.Border; public class AirplaneGUI { public static void main(String[] args) { initialize(); } //JButton[] buttons; private JMenuBar menuBar; private JMenuItem item; JFrame frame; final Color[] colors = {Color.blue, Color.yellow, Color.green}; JTextArea[] textAreas; final int NUM_LISTS = 3; final String[] LIST = {"passenger", "cargo", "bussiness"}; JTextArea spite; public static void initialize() { JFrame frame = new JFrame(); frame.setTitle("flight schedule"); frame.setSize(250, 250); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(500, 500); AirplaneController listener = new AirplaneController(frame); listener.runList(); JMenuBar menuBar = new JMenuBar(); JMenu menu = new JMenu("File"); JMenuItem startItem = new JMenuItem("Start"); startItem.addActionListener(listener); menu.add(startItem); JMenuItem clearItem = new JMenuItem("Clear"); clearItem.addActionListener(listener); menu.add(clearItem); JMenuItem exitItem = new JMenuItem("Exit"); exitItem.addActionListener(listener); menu.add(exitItem); JMenu menu1 = new JMenu("Filter"); JMenuItem passengerItem = new JMenuItem("Passenger"); passengerItem.addActionListener(listener); menu1.add(passengerItem); //frame.setBackground(Color.blue); JMenuItem bussinessItem = new JMenuItem("Business"); bussinessItem .addActionListener(listener); menu1.add( bussinessItem ); //frame.setBackground(Color.yellow); JMenuItem cargoItem = new JMenuItem("Cargo"); cargoItem.addActionListener(listener); menu1.add(cargoItem); //frame.setBackground(Color.green); menuBar.add(menu); menuBar.add(menu1); Container pane = frame.getContentPane(); frame.setJMenuBar(menuBar); frame.setVisible(true); } public void setupDisplayPanel() { Border squareBorder = BorderFactory.createLineBorder(Color.BLACK, 0); textAreas = new JTextArea[NUM_LISTS]; for (int i = 0; i < NUM_LISTS; ++i) { textAreas[i] = new JTextArea(LIST[i] + "\n"); textAreas[i].setBorder(squareBorder); textAreas[i].setBackground(colors[i]); } } public void displayList(int selection, AirplaneList result) { spite.append(result.toString()); } public void deleteList(){ spite=null; } } 

我试过改变JFrame gui; 在AirplaneController到AirplaneGUI gui; ,然后在AirplaneGUI.java中创建错误:

javax.swing.JFrame无法强制转换为AirplaneGUI

我怎样才能解决这个问题?

displayList是你在AirplaneGUI编写的一个方法,为什么你期望它在JFrame呢? 改变JFrame gui; AirplaneGUI gui;public AirplaneController(JFrame frame)public AirplaneController(AirplaneGUI frame)

已经说过,有太多的编译错误和缺少类让我能够运行它。

可能你需要像public class AirplaneGUI extends JFrame{一样扩展JFrame public class AirplaneGUI extends JFrame{ 。 我说“可能是”因为没有得到你想做的事。