Я пытаюсь сделать gui с двумя списками меню, по 3 элемента в каждом. Что моя проблема в том, что, когда я нажимаю на элемент, я получаю ошибку «Метод DisplayList (INT, AirplaneList) не определено для типа JFrame»Метод ... не определен для типа 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);
и создает эту ошибку: исключение в потоке «АВТ-EventQueue-0» java.lang.Error: Нерешенные проблемы компиляции: метод DisplayList (интермедиат, AirplaneList) не определено для типа 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;
}
}
Я попытался изменить JFrame gui;
в AirplaneController к AirplaneGUI gui;
, который затем созданной ошибки в AirplaneGUI.java:
javax.swing.JFrame не может быть приведен к AirplaneGUI
Как я могу исправить это?
'gui' - это экземпляр' JFrame', а не 'AirplaneGUI' ... – MadProgrammer
*« Неразрешенная проблема компиляции »* В стороне. Решите проблемы с компиляцией * перед тем, как попытаться запустить код! –
@MadProgrammer - я пробовал это, а затем мне пришлось сделать бросок, который мне пришлось изменить для параметра «public AirplaneController (JFrame frame)» на «public AirplaneController (AirplaneGUI frame)», что привело к ошибкам в AirplaneGUI. java – Imnotanerd