我正在尝试用两个菜单列表制作一个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”中的异常java.lang.Error:未解决的编译问题:
对于类型JFrame
以下是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;
}
}
我尝试将AirplaneController中的JFrame gui;
更改为AirplaneGUI gui;
,然后在AirplaneGUI.java中创建错误:
javax.swing.JFrame无法强制转换为AirplaneGUI
我该如何解决这个问题?
答案 0 :(得分:3)
displayList
是您在AirplaneGUI
中编写的一种方法,为什么您希望它出现在JFrame
中?将JFrame gui;
更改为AirplaneGUI gui;
,将public AirplaneController(JFrame frame)
更改为public AirplaneController(AirplaneGUI frame)
。
已经说过,有太多的编译错误和缺少类让我能够运行它。
可能需要扩展JFrame,如public class AirplaneGUI extends JFrame{
。我说“可能是”因为没有得到你想做的事。