方法 ... 对于 JFrame 类型未定义

2022-01-24 00:00:00 java swing jframe

我正在尝试制作一个带有两个菜单列表的 gui,每个列表中有 3 个项目.我的问题是,当我单击一个项目时,出现错误JFrame 类型的方法 displayList(int, AirplaneList) 未定义"

I'm trying to make a gui with two menu lists, with 3 items in each. What my problem is, is that when I click on an item, I get an error "The method displayList(int, AirplaneList) is undefined for the type JFrame"

AirplaneController.java 的代码:

Code for 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"java.lang.Error 中的异常:未解决的编译问题:JFrame 类型的 displayList(int, AirplaneList) 方法未定义

The problem is here: gui.displayList(selection, list); and creates this error: Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: The method displayList(int, AirplaneList) is undefined for the type JFrame

这是 AirplaneGUI.java 的当前代码:

Here's the current code for 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] + "
");
            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;
    }
}

我尝试将 AirplaneController 中的 JFrame gui; 更改为 AirplaneGUI gui;,然后在 AirplaneGUI.java 中产生错误:

I've tried changing the JFrame gui; in AirplaneController to AirplaneGUI gui;, which then created errors in AirplaneGUI.java:

javax.swing.JFrame 无法转换为 AirplaneGUI

javax.swing.JFrame cannot be cast to AirplaneGUI

我该如何解决这个问题?

How can I fix this?

推荐答案

displayList是你在AirplaneGUI里写的一个方法,为什么你期望它在JFrame?将 JFrame gui; 更改为 AirplaneGUI gui; 并将 public AirplaneController(JFrame frame) 更改为 public AirplaneController(AirplaneGUI frame).

displayList is a method you have written in AirplaneGUI why do you expect it to be in JFrame? Change JFrame gui; to AirplaneGUI gui; and public AirplaneController(JFrame frame) to public AirplaneController(AirplaneGUI frame).

话虽如此,编译错误和缺少的类太多,我无法运行它.

Having said that there are too many compilation errors and missing classes for me to be able to run it.

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

May be you need extend JFrame like public class AirplaneGUI extends JFrame{ . I said "may be" because do not get what you are trying to do .

相关文章