【问题标题】:Use an arraylist from class A in class B在 B 类中使用 A 类的数组列表
【发布时间】:2017-01-29 00:37:04
【问题描述】:

我需要知道如何将一个类的数组列表用于另一个类。 我正在使用 jFrame,当用户单击按钮时,我需要将该数组列表传输到另一个类(我需要使用此类中的数据)。

我有什么:

A类(我的问题出在jbutton点击方法上):

   /*
 * 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类的arraylist中的数据用于B类吗?

【问题讨论】:

  • 请创建并发布一个有效的minimal reproducible example。从您的代码的外观来看,如果您进行了认真而体面的重构,您和我们将更容易调试和扩展,并让我们理解。
  • 旁白:您应该将MouseListeners 添加到JButtons,而是ActionListeners。一个在这里工作得比另一个好得多。接下来,你不应该使用命名为 jList4 等的变量。如果你使用了很多类似的变量,那么你应该将它们合并到一个数组或一个 ArrayList 中。
  • 而且您不想或不需要在 for 循环中重复地将 相同的模型 添加到 JList 中。添加一次,然后在循环中单独更新模型。
  • Esse método deve ser criado em qual classe @AlmightyR ?

标签: java class arraylist


【解决方案1】:

立即想到解决此问题的两种方法:

  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)
}

【讨论】:

  • 好的,我理解你的解决方案,但是现在,我如何在 B 类中打印 arraylist dados,我需要在 B 类中使用 arraylist。
  • 例如:我想在B类的initcomponents中从A类打印arraylistdados
  • @Mutante 我们不知道您在 B 类中如何使用它,或者您将如何使用它;所以除了基本上你已经做过的事情之外,不可能进一步回答这个问题:System.out.print(dados); 或在这种情况下为System.out.println(jList.getModel().toString()) ---此外,任何进一步的事情都超出了当前问题的范围,并且会使当前如果在此处编辑,问题太宽泛。所以你应该尝试寻找现有的问答。如果您没有找到任何对您有帮助的内容,那么您可以将其作为新问题发布。 =)
  • @Mutante 您可能应该避免在initcomponents 内执行此操作;否则,您会将不是 initialization 的内容放入特定于执行初始化的方法中,从而破坏其目的和一致性。 --- 您可能想在它被调用后立即执行它,构造函数 中,而不是。但是,您将无法使用我的方法适当地执行此操作,因为初始化(构造函数)和设置 dados 是在不同时间分别完成的;并且 dados 在构造函数运行时不会也无法设置...(继续)
  • @Mutante 但是,首先,这可能不是您想要使用dados 的方式。而且,即使以这种方式用于测试目的,您也可以轻松地实现 Austin 的解决方案,同时保持 Setter 方法,只需从构造函数中调用 setter:public TelaRBC(ArrayList&lt;String&gt; dados){ initComponents(); this.setDados(dados); } --- 因为您似乎很难处理多个事情,如果您需要我,我可以帮助您全面审查您的项目/代码。如果可能,只需将其发布到 GitHub(并在此处链接),或者在聊天中给我打电话。 =)
【解决方案2】:

TelaRBC 的构造函数中,将ArrayList 参数保存到字段中,例如

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
}

然后在TelaRBC类中添加类似getArrayList的方法,例如:

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

【讨论】:

  • dados_rbc 这不是一门课。我怎样才能做到这一点?抱歉,我是 Java 新手。
  • @Mutante 抱歉,已更正为 TelaRBC 类;)
  • 好的,我会用我的整个代码更新我的帖子,我不明白这个。
猜你喜欢
  • 1970-01-01
  • 2015-09-07
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 2011-06-18
相关资源
最近更新 更多