Java 将一个Jframe中的变量集从一个传递到另一个

Java 将一个Jframe中的变量集从一个传递到另一个,java,swing,class,jframe,Java,Swing,Class,Jframe,我有一个名为User的JFrame,其中声明了一个名为id的变量,并根据某些条件将其设置为某个值 我需要在第二个名为output的JFrame中使用这个变量 这是我的密码 class InputScreen extends javax.swing.JFrame { public int id = 0; private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {

我有一个名为User的JFrame,其中声明了一个名为id的变量,并根据某些条件将其设置为某个值

我需要在第二个名为output的JFrame中使用这个变量

这是我的密码

class InputScreen extends javax.swing.JFrame {
public int id = 0;

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
    if (condition){
        id = 1;
        System.out.println(id);
    }
    elseif (condition){
             id = 2;
             System.out.println(id);
    }
    elseif (condition){
             id = 3;
             System.out.println(id);
    }
    else{
    System.exit(0);
    }
我在帧输出中使用了构造函数,但它似乎不起作用

public class Output extends javax.swing.JFrame {
int rule;

public Output(int Id){
    rule = Id;
    initComponents();
}

public Output() {
    initComponents();
    conn = MySqlConnect.ConnectDB();
}
更新代码 帧输入

class InputScreen extends javax.swing.JFrame {
public int id = 0;

public int getID(){
    return input_rule_id;
}

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
    if (condition){
        id = 1;
        System.out.println(id);
    }
    elseif (condition){
             id = 2;
             System.out.println(id);
    }
    elseif (condition){
             id = 3;
             System.out.println(id);
    }
表单输出

private void formWindowActivated(java.awt.event.WindowEvent evt)       {                                     

    Input InSc = new Input();
    InSc.getId();

 }

所有基本数据类型都将通过值传递。使用对象包装器通过引用传递值。例如原子整数

class InputScreen extends javax.swing.JFrame {
    private AtomicInteger id = new AtomicInteger(0);

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
    if (condition){
        id.set(1);
        System.out.println(id);
    }
    else if (condition){
             id.set(2);
             System.out.println(id);
    }
    else if (condition){
             id.set(3);
             System.out.println(id);
    }
      else{
      System.exit(0);
    }
}

public class Output extends javax.swing.JFrame {
AtomicInteger rule;

public Output(AtomicInteger Id){
    rule = Id;
    initComponents();
}

public Output() {
    initComponents();
    conn = MySqlConnect.ConnectDB();
}
}

所有基本数据类型都将通过值传递。使用对象包装器通过引用传递值。例如原子整数

class InputScreen extends javax.swing.JFrame {
    private AtomicInteger id = new AtomicInteger(0);

private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
    if (condition){
        id.set(1);
        System.out.println(id);
    }
    else if (condition){
             id.set(2);
             System.out.println(id);
    }
    else if (condition){
             id.set(3);
             System.out.println(id);
    }
      else{
      System.exit(0);
    }
}

public class Output extends javax.swing.JFrame {
AtomicInteger rule;

public Output(AtomicInteger Id){
    rule = Id;
    initComponents();
}

public Output() {
    initComponents();
    conn = MySqlConnect.ConnectDB();
}
}

您可以使用getter和setter。在要传递id变量的帧中定义一个getter方法。乙二醇

public int getID(){
      return id;
}
在另一个框架中,您可以使用此方法返回结果<代码>int id=getID()


解决这个问题的另一个方法是使变量globe和static可以在另一个框架中导入并使用

您可以使用getter和setter。在要传递id变量的帧中定义一个getter方法。乙二醇

public int getID(){
      return id;
}
在另一个框架中,您可以使用此方法返回结果<代码>int id=getID()


解决这个问题的另一个方法是使变量globe和static可以在另一个框架中导入并使用

参数传递 最简单的方法是将输出作为参数传递给InputScreen。然后,您可以在InputScreen.SubmitButtoActionPerformed()逻辑中调用Output.setId(id)方法。然而,当应用程序增长时,这种方式有点问题

观察者模式 更好的方法是将IdChangedListener作为观察者模式的一部分实现为已实现的ActionListener的代理。当您的ActionListener启动时,您将所有注册为观察员的IDChangeListener调用到InputScreen。在输出中,提供方法setId(id)以提供访问。在实例化两个JFrame的地方,您实现了一个IdChangeListener,将它添加到InputScreen,当它触发时,您调用Output.setId()

不管怎么说,您只需要一个事件就可以看到大量的工作(和代码)。此外,这种方法在应用程序大小和动态方面也有其局限性

内存中事件总线 最新的方法是使用内存中的事件总线。这消除了UI中组件的硬连接,并减少了代码大小。但是,它限制了组件的重用,因为它们会自动对某些事件做出反应。如果你不止一次拥有它们呢?听不同的节目


您需要考虑在哪里使用哪种方法。我建议使用EventBus在应用程序的具体组件之间进行事件传播。在中等尺寸的组件上使用观察者模式,而在小尺寸或非常静态的组件上使用参数传递。

参数传递 最简单的方法是将输出作为参数传递给InputScreen。然后,您可以在InputScreen.SubmitButtoActionPerformed()逻辑中调用Output.setId(id)方法。然而,当应用程序增长时,这种方式有点问题

观察者模式 更好的方法是将IdChangedListener作为观察者模式的一部分实现为已实现的ActionListener的代理。当您的ActionListener启动时,您将所有注册为观察员的IDChangeListener调用到InputScreen。在输出中,提供方法setId(id)以提供访问。在实例化两个JFrame的地方,您实现了一个IdChangeListener,将它添加到InputScreen,当它触发时,您调用Output.setId()

不管怎么说,您只需要一个事件就可以看到大量的工作(和代码)。此外,这种方法在应用程序大小和动态方面也有其局限性

内存中事件总线 最新的方法是使用内存中的事件总线。这消除了UI中组件的硬连接,并减少了代码大小。但是,它限制了组件的重用,因为它们会自动对某些事件做出反应。如果你不止一次拥有它们呢?听不同的节目


您需要考虑在哪里使用哪种方法。我建议使用EventBus在应用程序的具体组件之间进行事件传播。在中等尺寸的组件上使用观察者模式,而在小尺寸或非常静态的组件上使用参数传递。

1)要更快获得更好的帮助,请发布或。2) 请参阅..1)的可能副本以获得更好的帮助,请尽快发布或。2) 查看的可能重复项。我尝试了此操作,但输出帧中的值似乎只有null。如果不查看完整的代码,我将无法帮助您。我现在已更新了代码。请你帮我整理一下,这不是完整的密码。我认为,你需要用一本书开始学习Java。因此,您可以提出问题,我们可以理解。我尝试了这一点,但输出帧中的值似乎只有null。如果不查看完整的代码,我将无法帮助您。我现在已更新了代码。请你帮我整理一下,这不是完整的密码。我认为,你需要用一本书开始学习Java。所以你可以问问题,我们可以理解。