【问题标题】:How to pass data between packages in Java?如何在Java中的包之间传递数据?
【发布时间】:2012-11-20 11:18:55
【问题描述】:

我正在使用 Eclipse 版本的 Juno。使用 WindowBuilder 创建一个 GUI,其中用户将在 JTextField 中输入一个数字,然后单击一个 JButton。我编写了一个 for 循环来确定用户输入的数字是否为质数。然后,GUI 窗口将显示“输入的数字是/不是素数”行的输出。我将在一个包中编写 GUI 的源代码,而带有 for 循环的类将在另一个包中。这两个包都驻留在同一个 Java 项目中。

我的问题是:如何将包含循环的公共类传递给包含 GUI 源代码的公共类(以便 GUI 可以吐出循环的结果)?除此之外,我在编写代码方面不需要任何帮助。谢谢

这是对第一个答案的回应:

package gui;

import java.awt.EventQueue;

import javax.swing.*;

public class GUI {

    private JFrame frame;
    private JTextField txtNumber;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    GUI window = new GUI();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the application.
     */
    public GUI() {
        initialize();
    }

    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 360, 286);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);

        txtNumber = new JTextField();
        txtNumber.setBounds(134, 13, 182, 22);
        frame.getContentPane().add(txtNumber);
        txtNumber.setColumns(10);

        JLabel lblPrompt = new JLabel("Enter a number");
        lblPrompt.setBounds(25, 16, 97, 16);
        frame.getContentPane().add(lblPrompt);

        JButton btnOK = new JButton("OK");
        btnOK.setBounds(208, 196, 97, 25);
        frame.getContentPane().add(btnOK);


    }
}

package guiDataProcessing;

public class GUIProcessPrime {
    //A loop that checks whether a number is or is not a prime number
    boolean IsOrIsnotPrime(int num) {
        for(int i=2;2*i<num;i++) {
            if(num%i==0)
                return false;
        }
        return true;
    }
}

【问题讨论】:

  • 向我们展示您的代码 - 如果没有看到您的代码上下文,就很难提供帮助。
  • 您可以将“engine”/“for-loop”实现作为构造函数的一部分传递,也可以通过 GUI 中的“setter”传递。确保您已正确设置 import 语句,以便 GUI 可以看到其他包中的类
  • @MadProgrammer 这就是我最初的想法。我正在尝试使用空白 JTextArea 的方式,并且只有在按下 JButton 并循环执行其计算时才显示文本。

标签: java eclipse class package windowbuilder


【解决方案1】:

您不是在包之间传递数据,而是在对象之间传递数据。包结构与您所询问的内容几乎没有关系。通常,要在对象之间传递数据,一个对象必须具有对另一个对象的引用,并且接收数据的对象必须具有用于接收该数据的公共方法。

【讨论】:

  • 谢谢,这是有道理的。我还不是特别擅长编程,所以我的经验深度很浅。我以前从未收到过这样的设计指南。
【解决方案2】:

对于另一个包中存在的第二个类,您还必须导入第一个类以供使用。第一堂课有:

package gui;

另一个包中的第二个类会是这样的:

package gui.otherpackage;
import gui.GUI; //GUI being the name of your first class

【讨论】:

    【解决方案3】:

    在面向对象的编程中,数据以对象的形式存在。数据以对象的形式存在,在 JVM 的堆空间中具有一些实例变量值的状态。为了识别对象在内存中的地址,我们使用引用变量在 java.So 中,在使用该对象的编程过程中,我们使用包含对该对象的引用的引用。假设,如果 测试=新 A();然后测试指向堆空间中的一些内存,其中一些方法 M1...Mn 具有实例变量值 v1....vn 类的对象。所以,如果你想在包之间传递数据,那么在其中创建对该对象的引用包级别。因此,如果对象具有像 somepackagename.Test.java 这样的包级别层次结构,则创建该 Test.java 的对象并使用参考测试进行操作。但是,该调用应在默认、私有、受保护和公共规则内调用方法或对该对象使用实例变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-03
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 2022-07-29
      • 2021-08-09
      • 2016-05-14
      相关资源
      最近更新 更多