[英]Calling an arraylist from another class
這是我的arraylist類的代碼; 包餐廳;
import java.util.ArrayList;
public class Controlclass {
public static void main(String[] args) {
// Create ArrayList for foodItems subclasses
ArrayList<Mains> MainsList = new ArrayList<Mains>();
//add items to the MainsList
Mains CurriedFriedRice = new Mains (" Curried fried rice ", 4.00, " Yummy curried fried rice " , 500);
Mains LambChopsWithCarrotPuree = new Mains (" Lamb chops with carrot puree ", 6.00, " Delicious Lamb chops with carrot puree " , 580);
Mains PadThaiNoodles = new Mains (" Pad Thai noodles ", 5.00, " Amazing thai noodles " , 480);
Mains SalmonAndAsparagusFajitas = new Mains (" Salmon and asparagus fajitas ", 4.90, " Fajita you will always come back for " , 450);
MainsList.add(CurriedFriedRice);
MainsList.add(LambChopsWithCarrotPuree);
MainsList.add(PadThaiNoodles);
MainsList.add(SalmonAndAsparagusFajitas);
for (Mains mains: MainsList){
System.out.println(mains);
}
這是我需要在其中使用這些arraylist的GUI類;
*
public class TheFoodLoversLounge {
private final GridLayout layout; // layout of this frame
private JFrame frame;
private final JPanel buttonbar;
private final JPanel combobar;
private final JPanel receiptbar;
private final JComboBox<String> mainsc;
public class TheFoodLoversLounge {
private final GridLayout layout; // layout of this frame
private JFrame frame;
private final JPanel buttonbar;
private final JPanel combobar;
private final JPanel receiptbar;
private final JComboBox<String> starters;
private final JComboBox<String> mainsc;
private final JComboBox<String> dessert;
private final JButton getTotalPrice;
private final JLabel l2;
private final JLabel l3;
private final JLabel l4;
private final JLabel l5;
private final JLabel l6;
private final JLabel l7;
private final JLabel l8;
private final JLabel l9;
private final JLabel l10;
private final JLabel r1;
private final JLabel r2;
private final JLabel r3;
private final JLabel r4;
private final JLabel r5;
private final JLabel r6;
private final JLabel r7;
private final JLabel r8;
private final JLabel r9;
private Controlclass control;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
TheFoodLoversLounge window = new TheFoodLoversLounge();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public TheFoodLoversLounge() {
MAXTABLES=10;
MAXDINERS=10;
initialize();
control = new Controlclass();
layout = new GridLayout(0,1,0,5);
starters=new JComboBox<>();
mainsc=new JComboBox<>();
dessert=new JComboBox<>();
for (Starters starterI: control.StarterList){
starters.addItem(starterI.toString());
}
starters.setMaximumRowCount(5);
for (Mains mainsI: control.MainsList){
mainsc.addItem(mainsI.toString());
}
mainsc.setMaximumRowCount(5);
for (Dessert dessertI: control.DessertList){
dessert.addItem(dessertI.toString());
}
buttonbar= new JPanel(layout);
buttonbar.setBackground(Color.LIGHT_GRAY);
buttonbar.add(getTotalPrice); buttonbar.add(l10);
combobar= new JPanel(layout);
combobar.setBackground(Color.PINK);
combobar.add(l1); combobar.add(starters);
combobar.add(l2); combobar.add(mainsc);
combobar.add(l4); combobar.add(dessert);
private void initialize() {
frame = new JFrame();
frame.setLocationRelativeTo(null);
//frame.setResizable(false);
frame.setSize(768, 800);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private class TheListener implements ActionListener
{
// process text field events
@Override
public void actionPerformed(ActionEvent event)
{
String string = "";
double arr [];
Orders ord = new Orders();
if (event.getSource() ==getTotalPrice){
ord.diners= Integer.parseInt((String) diners.getItemAt(diners.getSelectedIndex()));
ord.tableno=Integer.parseInt((String) tableno.getItemAt(tableno.getSelectedIndex()));
ord.item[0]=starters.getItemAt(starters.getSelectedIndex());
// ord.qty[1]=
ord.rate[0]=control.StarterList.get(starters.getSelectedIndex()).price;
ord.item[1]=mainsc.getItemAt(mainsc.getSelectedIndex());
// ord.qty[2]=
ord.rate[1]=control.MainsList.get(mainsc.getSelectedIndex()).price;
ord.item[2]=dessert.getItemAt(dessert.getSelectedIndex());
// ord.qty[3]=
ord.rate[2]=control.DessertList.get(dessert.getSelectedIndex()).price;
}
}}}
*每個人都可以忽略語法錯誤嗎,因為它不是完整的代碼,我只想關注arraylist,因為每次我嘗試編譯它時,在實際代碼在語法上正確的情況下,都會出現以下錯誤。 線程“ AWT-EventQueue-0”中的異常java.lang.Error:未解決的編譯問題:
StarterList cannot be resolved or is not a field
MainsList cannot be resolved or is not a field
DessertList cannot be resolved or is not a field
DrinksList cannot be resolved or is not a field
FishList cannot be resolved or is not a field
StarterList cannot be resolved or is not a field
MainsList cannot be resolved or is not a field
DessertList cannot be resolved or is not a field
FishList cannot be resolved or is not a field
DrinksList cannot be resolved or is not a field
at Restaurant.TheFoodLoversLounge.<init>(TheFoodLoversLounge.java:121)
at Restaurant.TheFoodLoversLounge$1.run(TheFoodLoversLounge.java:91)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
這些是我得到的錯誤。 我不知道如何解決這些問題。 誰能幫助我。 不提交完整代碼的原因是因為它是我的項目,因此我不能冒險。 因此,非常感謝你們提供的解決方案。
不要在main
方法中定義列表。 將它們定義為成員,然后在構造函數中對其進行初始化。 然后為每個列表編寫getter方法。
public class Controlclass {
private ArrayList<Mains> MainsList;
public ControlClass() {
MainsList = new ArrayList<Mains>()
}
public ArrayList<Mains> getMainsList() {
return MainsList;
}
}
最后,使用getter方法到達列表。
for (Mains mainsI: control.getMainsList()){
Controlclass
不提供對您在main
方法中定義的任何ArrayList
的訪問(這對您的問題有很大的暗示)。
首先在Controlclass
定義實例字段,並提供public
獲取器以允許它們訪問這些字段(通過您可以控制的方法-例如,您可以返回不可變列表或在返回之前復制列表)
import java.util.ArrayList;
import java.util.List;
public class Controlclass {
private List<...> starterList;
private List<...> mainsList;
private List<...> dessertList;
private List<...> drinksList;
private List<...> fishList;
public static void main(String[] args) {
Controlclass controlClass = new Controlclass();
}
public Controlclass() {
starterList = new ArrayList<>(25);
mainsList = new ArrayList<>(25);
dessertList = new ArrayList<>(25);
drinksList = new ArrayList<>(25);
fishList = new ArrayList<>(25);
// Populate the values...
}
public List<...> getStarterList() {
return starterList;
}
public List<...> getMainsList() {
return mainsList;
}
public List<...> getDessertList() {
return dessertList;
}
public List<...> getDrinksList() {
return drinksList;
}
public List<...> getFishList() {
return fishList;
}
}
(ps您將需要用適當的泛型替換<...>
,我並不是真的想深入研究所有代碼來找出答案)
接下來將Controlclass
的實例傳遞給您的其他類
public class TheFoodLoversLounge {
//...
private Controlclass control;
public TheFoodLoversLounge(Controlclass control) {
this.control = control
//...
最后,利用Controlclass
的屬性
for (Starters starterI: control.getStarterList()) {
starters.addItem(starterI.toString());
}
(並且請記住,這是程序的主要入口點,擁有兩種main
方法將非常令人困惑)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.