首页 > 解决方案 > 在 Java 中,如何在 jframe 组件之间传递变量和列表

问题描述

我创建了一个带有列表对象的简单程序。我还有一个简单的 UI,想将列表不同部分的值添加到文本框架和标签中,但找不到如何传递所需的值。

列表对象已在 UI 的主类中创建(使用 Netbeans 中的 GUI 构建器创建)。

我已尝试访问 jButton 执行操作部分中所需的值,但被告知包 exampleProgram 不存在。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) 
{
    jTextField1.setText(exampleProgram.exampleClass1.get(0).number3);
}                                        

public static void main(String args[]) 
{
    ExampleProgram exampleProgram = new ExampleProgram();
    exampleProgram.exampleClass1.add(new ExampleClass(5,4,3,2,1));
    System.out.println("The example value (which should be 3) is : " + exampleProgram.exampleClass1.get(0).number3);

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

当前包中的另外两个文件是 ExampleProgram

package classtest;

import java.util.ArrayList;
import java.util.List;

public class ExampleProgram 
{
    List<ExampleClass> exampleClass1 = new ArrayList<>();
    List<ExampleClass> exampleClass2 = new ArrayList<>();
    List<ExampleClass> exampleClass3 = new ArrayList<>();
}

和 ExampleClass

package classtest;

public class ExampleClass 
{
    int number1;
    int number2;
    int number3;
    int number4;
    int number5;

    public ExampleClass (int a, int b, int c, int d, int e) 
    {
        number1 = a;
        number2 = b;
        number3 = c;
        number4 = d;
        number5 = e;
    }
}

更新:

尝试了建议的答案 - 在使用构造函数时有效,但仍然无法访问按钮操作代码中传递的对象。

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

    public ExampleUI(ExampleProgram passedObject)
    {
        initComponents();
        jTextField1.setText(String.valueOf(passedObject.exampleClass1.get(0).number3));
    }

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
    {                                         
        jTextField2.setText(String.valueOf(passedObject.exampleClass1.get(0).number3));
    }                                        

    public static void main(String args[])
    {
        ExampleProgram exampleProgram = new ExampleProgram();
        exampleProgram.exampleClass1.add(new ExampleClass(5,4,3,2,1));
        System.out.println("The example value (which should be 3) is : " + exampleProgram.exampleClass1.get(0).number3);

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

标签: javalistswingarraylistjframe

解决方案


    public static void main(String args[]) 
{
    ExampleProgram exampleProgram = new ExampleProgram();
    exampleProgram.exampleClass1.add(new ExampleClass(5,4,3,2,1));
    System.out.println("The example value (which should be 3) is : " + exampleProgram.exampleClass1.get(0).number3);

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

在 ExampleUI 类的构造函数中传递数据,然后在 ExampleUI 类中访问它。希望这会帮助你。


推荐阅读