方法 ... 对于 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 .
相关文章