2016-09-20 88 views
2

我需要知道如何使用从一个类到另一个类的数组列表。 我正在使用jFrame,当用户点击一个按钮时,我需要将该ArrayList转移到另一个类(我需要使用这个类中的数据)。使用B类中A类的数组列表

我拥有的一切:

A类(我的问题是在jbuton点击方法):

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package computadorrbc; 

import java.util.ArrayList; 
import javax.swing.DefaultListModel; 

/** 
* 
* @author Iago Sestrem Ochôa 
*/ 
public class Tela extends javax.swing.JFrame { 

    /** 
    * Creates new form Tela 
    */ 
    public Tela() { 
     initComponents(); 
     ArrayList<String> gabinete = new ArrayList<String>(); 
     ArrayList<String> processador = new ArrayList<String>(); 
     ArrayList<String> memoria = new ArrayList<String>(); 
     ArrayList<String> hd = new ArrayList<String>(); 
     ArrayList<String> ssd = new ArrayList<String>(); 
     ArrayList<String> gpu = new ArrayList<String>(); 
     ArrayList<String> teclado = new ArrayList<String>(); 
     ArrayList<String> mouse = new ArrayList<String>(); 
     ArrayList<String> fonte = new ArrayList<String>(); 
     ArrayList<String> refrigeracao = new ArrayList<String>(); 
     ArrayList<String> monitor = new ArrayList<String>(); 
     ArrayList<String> headset = new ArrayList<String>(); 
     ArrayList<String> motherboard = new ArrayList<String>(); 
     gabinete.add("Mid Tower"); 
     gabinete.add("Full Tower"); 
     processador.add("i7 6700K"); 
     processador.add("i7 6700"); 
     processador.add("i5 6600K"); 
     processador.add("i5 6600"); 
     memoria.add("HyperX 8GB 1600"); 
     memoria.add("Vengeance 8GB 1600"); 
     memoria.add("HyperX 8GB 1866"); 
     memoria.add("HyperX 8GB 2133"); 
     hd.add("WD 1TB 7200 RPM"); 
     hd.add("Seagate 1TB 7200 RPM"); 
     hd.add("Seagate 2TB 7200 RPM"); 
     ssd.add("Kingston 120GB"); 
     ssd.add("Sandisk 120GB"); 
     ssd.add("Kingston 240GB"); 
     ssd.add("Sandisk 240GB"); 
     gpu.add("AMD R9 390"); 
     gpu.add("AMD R9 Fury"); 
     gpu.add("AMD R9 390X"); 
     gpu.add("GTX 980 TI"); 
     gpu.add("GTX Titan"); 
     gpu.add("GTX 1080"); 
     gpu.add("GTX 1070"); 
     teclado.add("Razer BlackWidow"); 
     teclado.add("Razer DeathStalker"); 
     teclado.add("Razer Cynosa"); 
     mouse.add("Razer Naga"); 
     mouse.add("Razer Abyssus"); 
     mouse.add("Razer Krait"); 
     mouse.add("Razer Deathadder"); 
     fonte.add("EVGA 1600W"); 
     fonte.add("Corsair 1500W"); 
     fonte.add("Coolermaster 1200W"); 
     fonte.add("SeaSonic 1000W"); 
     fonte.add("Corsair 860W"); 
     fonte.add("SeaSonic 520W"); 
     refrigeracao.add("Água"); 
     refrigeracao.add("Ar"); 
     monitor.add("Benq 27p 144Hz"); 
     monitor.add("Asus 27p 144Hz"); 
     monitor.add("Asus 27p QuadHD"); 
     monitor.add("LG 25p FullHD"); 
     monitor.add("Acer 21,5p FullHD"); 
     headset.add("Razer Kraken"); 
     headset.add("Razer TiaMat"); 
     headset.add("Razer Chiamera"); 
     headset.add("Razer Manowar"); 
     headset.add("Logitech G430"); 
     headset.add("Logitech G933"); 
     headset.add("Logitech G35"); 
     motherboard.add("ATX Maximus VIII"); 
     motherboard.add("ATX ROG STRIX"); 
     motherboard.add("ATX Sabertooth"); 
     motherboard.add("ATX 970 PRO"); 
     motherboard.add("ATX GA 970"); 
     DefaultListModel model0 = new DefaultListModel(); 
     for (String s : gabinete) { 
      jList1.setModel(model0); 
      model0.addElement(s); 
     } 
     DefaultListModel model1 = new DefaultListModel(); 
     for (String s : processador) { 
      jList2.setModel(model1); 
      model1.addElement(s); 
     } 
     DefaultListModel model2 = new DefaultListModel(); 
     for (String s : memoria) { 
      jList3.setModel(model2); 
      model2.addElement(s); 
     } 
     DefaultListModel model3= new DefaultListModel(); 
     for (String s : hd) { 
      jList4.setModel(model3); 
      model3.addElement(s); 
     } 
     DefaultListModel model4 = new DefaultListModel(); 
     for (String s : ssd) { 
      jList5.setModel(model4); 
      model4.addElement(s); 
     } 
     DefaultListModel model5 = new DefaultListModel(); 
     for (String s : gpu) { 
      jList6.setModel(model5); 
      model5.addElement(s); 
     } 
     DefaultListModel model6 = new DefaultListModel(); 
     for (String s : teclado) { 
      jList7.setModel(model6); 
      model6.addElement(s); 
     } 
     DefaultListModel model7 = new DefaultListModel(); 
     for (String s : mouse) { 
      jList8.setModel(model7); 
      model7.addElement(s); 
     } 
     DefaultListModel model8 = new DefaultListModel(); 
     for (String s : fonte) { 
      jList9.setModel(model8); 
      model8.addElement(s); 
     } 
     DefaultListModel model9 = new DefaultListModel(); 
     for (String s : refrigeracao) { 
      jList10.setModel(model9); 
      model9.addElement(s); 
     } 
     DefaultListModel model10 = new DefaultListModel(); 
     for (String s : monitor) { 
      jList11.setModel(model10); 
      model10.addElement(s); 
     } 
     DefaultListModel model11 = new DefaultListModel(); 
     for (String s : headset) { 
      jList12.setModel(model11); 
      model11.addElement(s); 
     } 
     DefaultListModel model12 = new DefaultListModel(); 
     for (String s : motherboard) { 
      jList13.setModel(model12); 
      model12.addElement(s); 
     } 
    } 





    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {          
     ArrayList<String> dados = new ArrayList<String>(); 
     dados.add(jList1.getSelectedValue()); 
     dados.add(jList2.getSelectedValue()); 
     dados.add(jList3.getSelectedValue()); 
     dados.add(jList4.getSelectedValue()); 
     dados.add(jList5.getSelectedValue()); 
     dados.add(jList6.getSelectedValue()); 
     dados.add(jList7.getSelectedValue()); 
     dados.add(jList8.getSelectedValue()); 
     dados.add(jList9.getSelectedValue()); 
     dados.add(jList10.getSelectedValue()); 
     dados.add(jList11.getSelectedValue()); 
     dados.add(jList12.getSelectedValue()); 
     dados.add(jList13.getSelectedValue()); 
     TelaRBC dados_rbc = new TelaRBC(dados); 
     TelaRBC tela_rbc = new TelaRBC(); 
     tela_rbc.setVisible(true); 
     dispose(); 
     System.out.print(dados); 
    }          

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     try { 
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { 
       if ("Nimbus".equals(info.getName())) { 
        javax.swing.UIManager.setLookAndFeel(info.getClassName()); 
        break; 
       } 
      } 
     } catch (ClassNotFoundException ex) { 
      java.util.logging.Logger.getLogger(Tela.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(Tela.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(Tela.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(Tela.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new Tela().setVisible(true); 
      } 
     }); 
    } 

    // Variables declaration - do not modify      
    private javax.swing.JButton jButton1; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JLabel jLabel10; 
    private javax.swing.JLabel jLabel11; 
    private javax.swing.JLabel jLabel12; 
    private javax.swing.JLabel jLabel13; 
    private javax.swing.JLabel jLabel14; 
    private javax.swing.JLabel jLabel2; 
    private javax.swing.JLabel jLabel3; 
    private javax.swing.JLabel jLabel4; 
    private javax.swing.JLabel jLabel5; 
    private javax.swing.JLabel jLabel6; 
    private javax.swing.JLabel jLabel7; 
    private javax.swing.JLabel jLabel8; 
    private javax.swing.JLabel jLabel9; 
    private javax.swing.JList<String> jList1; 
    private javax.swing.JList<String> jList10; 
    private javax.swing.JList<String> jList11; 
    private javax.swing.JList<String> jList12; 
    private javax.swing.JList<String> jList13; 
    private javax.swing.JList<String> jList2; 
    private javax.swing.JList<String> jList3; 
    private javax.swing.JList<String> jList4; 
    private javax.swing.JList<String> jList5; 
    private javax.swing.JList<String> jList6; 
    private javax.swing.JList<String> jList7; 
    private javax.swing.JList<String> jList8; 
    private javax.swing.JList<String> jList9; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JScrollPane jScrollPane10; 
    private javax.swing.JScrollPane jScrollPane11; 
    private javax.swing.JScrollPane jScrollPane12; 
    private javax.swing.JScrollPane jScrollPane13; 
    private javax.swing.JScrollPane jScrollPane2; 
    private javax.swing.JScrollPane jScrollPane3; 
    private javax.swing.JScrollPane jScrollPane4; 
    private javax.swing.JScrollPane jScrollPane5; 
    private javax.swing.JScrollPane jScrollPane6; 
    private javax.swing.JScrollPane jScrollPane7; 
    private javax.swing.JScrollPane jScrollPane8; 
    private javax.swing.JScrollPane jScrollPane9; 
    // End of variables declaration     
} 

所以我试图用在B类的dados_rbc

package computadorrbc; 


public class TelaRBC extends javax.swing.JFrame { 


    public TelaRBC() { 
     initComponents(); 
DefaultListModel model4 = new DefaultListModel(); 
     for (String s : dados_rbc) { 
      jList.setModel(model4); 
      model4.addElement(s); 
    } 

    } 

public static void main(String args[]) { 

java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new TelaRBC().setVisible(true); 
      } 
     }); 
    } 

private javax.swing.JLabel jLabel1; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JTable jTable1; 

但这不起作用,有人知道另一种方法来使用从B类数组列表中的数据到B类数据?

+2

请创建并发布一个有效的[MCVE。通过你的代码的外观,如果你做了一个严肃而体面的重构,你会让我们更容易调试和扩展,并让我们理解。 –

+0

Side recs:你应该*不*要将MouseListeners添加到JButtons,而是添加ActionListeners。这个在这里比另一个好得多。接下来,你不应该使用像jList4这样的变量,等等。如果你使用了很多类似的变量,那么你应该将它们合并到一个数组或ArrayList中。 –

+0

而你不想或需要在你的for循环中重复添加**相同的模型**到JList。添加一次,然后在循环内单独更新模型。 –

回答

3

两种方法来解决这个立刻浮现在脑海:

  1. 构造函数参数:
    Austin D's answer

  2. 实例(类B)之后,从原点(A类)设置:
    TelaRBC(B),为模型创建一个Setter方法;通过这种方法,设置从A类模型:

    //CLASS B 
    public void setDados(ArrayList<String> dados) { 
        DefaultListModel model = new DefaultListModel(); 
        for (String s : dados) { 
         model.addElement(s); 
        } 
        jList.setModel(model); 
    } 
    
    //CLASS A 
    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {          
        ArrayList<String> dados = new ArrayList<String>(); 
        dados.add(jList1.getSelectedValue()); 
        //... 
        dados.add(jList13.getSelectedValue()); 
        TelaRBC tela_rbc = new TelaRBC(); 
    
        tela_rbc.setDados(dados); //<<<<<<<<<< The difference. 
    
        tela_rbc.setVisible(true); 
        System.out.print(dados); 
        dispose(); 
    } 
    

特典:A类,你应该使用ActionListener代替MouseClicked

既然你显然使用NetBeans GUI编辑器...

  1. 在代码标签,从当前事件(Button1MouseClicked())复制代码。
  2. 在视觉标签中,选择jButton1
  3. 在属性窗口,进入到Events选项卡,并删除当前MouseClicked事件。
  4. 转到ActionPerformed事件(上图),添加它,和过去的代码给它。

最后,你应该没有jButton1MouseClicked()方法,而是有这样的:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    //... (code that was previously in the 'MouseClicked' method) 
} 
+0

好吧,我理解你的解决方案,但现在,我如何在B类中打印arraylist'dados',我需要使用类B中的数组列表。 – Mutante

+0

例如:我想从类中打印数组列表'dados' A在B类的初始组件中。 – Mutante

+0

@Mutante我们不知道您在B班中如何使用它,或者您将如何使用它。 (System.out.print(dados);''或者在这种情况下''System.out.println(jList.getModel()。toString())是不可能回答这个问题的。 )---另外,任何进一步的事情都不在这个当前问题的范围之内,如果在这里编辑的话,会使当前的问题太宽泛。所以你应该尝试寻找现有的问答。如果你没有找到可以帮助你的东西,那么你可以把它作为一个新问题发布。 =) – XenoRo

3

在构造为TelaRBCArrayList参数保存到一个场,例如

public class TelaRBC { 

    private ArrayList<String> dadosList; //the ArrayList of selected values 

    public TelaRBC(ArrayList<String> theList){ 
     this.dadosList = theList; 
     //... remainder of the constructor omitted 
    } 
    //.. remainder of the TelaRBC class implementation omitted 
} 

然后,像getArrayList方法添加到TelaRBC类,如:

public ArrayList<String> getArrayList(){ return this.dadosList;} 
+0

'dados_rbc'这不是一堂课。我怎样才能做到这一点?对不起,我是Java新手。 – Mutante

+0

@Mutante对不起,更正为'TelaRBC'类;) –

+0

好吧,我会用我的整个代码更新我的文章,我不理解这一点。 – Mutante

相关问题