2014-10-06 2 views
-1

У меня есть программа, использующая JTabbedPane. На одной панели у меня есть кнопка, которая обновляет массивList объектов на основе ввода с той же панели.Как передать ArrayList между двумя отдельными JTabbedPanes

Что бы я хотел сделать, это иметь второе обновление панели с информацией об объекте на основе массива в первой панели.

Однако я не уверен, как передать список между панелями. Есть ли способ переместить массив на панель №2 при нажатии кнопки обновления на первой панели?

Это основной файл. Инстанцирование два язычка

public class Assignment6 extends JApplet 
{ 

    private int APPLET_WIDTH = 650, APPLET_HEIGHT = 350; 

    private JTabbedPane tPane; 
    private StorePanel storePanel; 
    private PurchasePanel purchasePanel; 
    private ArrayList computerList; 


    public void init() 
    { 

    computerList = new ArrayList(); 


    storePanel = new StorePanel(computerList, purchasePanel); 
    purchasePanel = new PurchasePanel(computerList); 




    tPane = new JTabbedPane(); 
    tPane.addTab("Store Inventory", storePanel); 
    tPane.addTab("Customer Purchase", purchasePanel); 

    getContentPane().add(tPane); 
    setSize (APPLET_WIDTH, APPLET_HEIGHT); //set Applet size 
    } 
} 

Первая панель инстанцирует кнопку слушателя, который применяет все логики к списку массива «compList»

private class ButtonListener implements ActionListener 
    { 
    public void actionPerformed(ActionEvent event) 
    { 
       //Add Computer to list 
       Computer comp = new Computer(); 
       comp.setBrandName(brandField.getText()); 
       comp.setPrice(Double.parseDouble(priceField.getText())); 
       comp.setMemory(Integer.parseInt(memoryField.getText())); 
       comp.setCPU(typeField.getText(), Integer.parseInt(speedField.getText())); 

       compList.add(comp); 
       } 
       stringField.setText(listString); 


       alertLabel.setText("Computer Added"); 
      } 
     } 

Вот другая панель. Цикл for в конце - это то, что мне нужно, чтобы нажать массив arrayList. После того, как он получает список, заселяет коробку с флажком для каждого объекта в списке

public PurchasePanel(ArrayList compList) 
{ 
    west = new JPanel(); 
    east = new JPanel(); 
    totalField = new JTextField(); 

    this.compList = compList; 
    setLayout(new GridLayout(0,2)); 
    add(west); 
    add(east); 
    east.setLayout(new BorderLayout()); 
    east.add(currentTotalLabel, BorderLayout.NORTH); 
    east.add(totalField, BorderLayout.CENTER); 
    west.setLayout(new BoxLayout(west, BoxLayout.Y_AXIS)); 

    for(Object c : compList){ 
     System.out.println("Made it"); 

     NumberFormat fmt = NumberFormat.getCurrencyInstance(); 

     String str = ("BrandName:" + (((Computer) c).getBrandName() +"CPU:" + (((Computer) c).getCPU() +"Memory:" + ((Computer) c).getMemory() + "M" +"Price:" + fmt.format(((Computer) c).getPrice())))); 


     JCheckBox chk = new JCheckBox(str); 
     west.add(chk); 

    } 
} 

} 
+0

Существует определенно путь. Почему бы вам не опубликовать свой код, чтобы мы могли точно видеть, с чем вы работаете? – ControlAltDel

+0

Код отправлен. Я упустил все настройки GUI @ControlAltDel – jrounsav

+1

. Лучший способ решить эту проблему - использовать готовые компоненты Swing/etc в 1 классе, который настраивает и контролирует их все. Таким образом, ваша логика о том, что нужно сделать, если изменения в списке можно обрабатывать на верхнем уровне, который имеет доступ ко всему – ControlAltDel

ответ

0

Вы можете использовать один и тот же приемник, используемый для обновления первого ArrayList, чтобы обновить вторую панель. Что-то вроде:

jButton1.addActionListener(new ActionListener() { 
    @Override 
    public void actionPerformed(ActionEvent e) { 
     // Update the first ArrayList 
     // Update the second pane 
    } 
Смежные вопросы