【问题标题】:Public Class in getting nothing from ArrayList从 ArrayList 一无所获的公共类
【发布时间】:2021-06-12 13:21:16
【问题描述】:

我正在开发一个用于编程练习的 GUI。我期望 GUI 做的是 CLASSTEST2 将在单击按钮时在 ArrayList (arrayList1) 中添加项目,而另一个 GUI (CLASSTEST1) 将通过公共打印该 arraylist 中的第一个项目和 arraylist 本身CLASSTEST1 中的无效函数 printArrayList ()

问题是,当我调用或运行打印上述内容的函数时,它显示 arrayList 是空的,并且即使项目已经添加到 arraylist 上,它也会抛出 IndexOutOfBoundsException。我有什么遗漏吗?

CLASSTEST1:

public class CLASSTEST1 extends javax.swing.JFrame {
    public CLASSTEST1() {
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(146, 146, 146)
                .addComponent(jButton1)
                .addContainerGap(177, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(128, 128, 128)
                .addComponent(jButton1)
                .addContainerGap(140, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        CLASSTEST2 classTest2 = new CLASSTEST2();
        System.out.print(classTest2.arrayList1.get(0));
    }                                        

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CLASSTEST1().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    // End of variables declaration  

CLASSTEST2:

import java.util.ArrayList;

/**
 *
 * @author Private
 */
public class CLASSTEST2 extends javax.swing.JFrame {

    ArrayList arrayList1 = new ArrayList();
    public CLASSTEST2() {
        initComponents();
    }


    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        addToArrayListTEXT = new javax.swing.JTextField();
        addToArrayListBTN = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        addToArrayListBTN.setText("jButton1");
        addToArrayListBTN.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                addToArrayListBTNActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(82, 82, 82)
                        .addComponent(addToArrayListTEXT, javax.swing.GroupLayout.PREFERRED_SIZE, 169, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(122, 122, 122)
                        .addComponent(addToArrayListBTN)))
                .addContainerGap(90, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(86, 86, 86)
                .addComponent(addToArrayListTEXT)
                .addGap(18, 18, 18)
                .addComponent(addToArrayListBTN)
                .addContainerGap(140, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                        

    private void addToArrayListBTNActionPerformed(java.awt.event.ActionEvent evt) {                                                  
       arrayList1.add(addToArrayListTEXT.getText());
      
    }                                                 
    
    public void printArrayList (){
        System.out.println(arrayList1.get(0));
        System.out.println(arrayList1);
    }
   
    /**
     * @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(CLASSTEST2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(CLASSTEST2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(CLASSTEST2.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(CLASSTEST2.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 CLASSTEST2().setVisible(true);
            }
        });
    }

这些小类只是我在大型项目中遇到的一个问题的代表,但我不能在这里发布,因为它太大了,但是这个问题和类几乎总结了它。

【问题讨论】:

  • arrayList1 in classtest2 在调用其构造函数后为空。如果您需要进行调试打印,只需使用System.out.println("classtest1::buttonAction: arrayList1 = " + classTest2.arrayList1);
  • GUI和swing应该在了解类和方法参数之类的东西之后学习,imo
  • @Rogue 是的,我同意,但我们的教授/讲师认为使用 GUI 作为向我们初学者教授 Java 的一种方式是个好主意。

标签: java class user-interface arraylist


【解决方案1】:

与CLASSTEST2中的ArrayList类似,需要让CLASSTEST2实例成为CLASSTEST1的成员,而不是每次都新建一个:

public class CLASSTEST1 extends javax.swing.JFrame {

    private CLASSTEST2 classTest2;

    private void initComponents() {
      
       classTest2 = new CLASSTEST2();
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        System.out.print(classTest2.arrayList1.get(0));
    }   

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

【讨论】:

  • Welp,它返回了 NullPointerException。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 2012-07-06
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 2023-03-06
  • 2021-08-27
相关资源
最近更新 更多