簡體   English   中英

從另一個類調用數組列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM