Java 如何从其他服务器处理打开的Jframe

Java 如何从其他服务器处理打开的Jframe,java,swing,oop,actionlistener,Java,Swing,Oop,Actionlistener,您好,我想知道如何从另一个jFrame中处置一个jFrame,因为我想创建一个该类的新实例,在其文本字段中使用新值,所以第一个jFrame如下: public class Frame1 extends javax.swing.JFrame implements ActionListener { Frame2 f; public Frame1() { initComponents(); this.setLocationRelativeTo(null)

您好,我想知道如何从另一个jFrame中处置一个jFrame,因为我想创建一个该类的新实例,在其文本字段中使用新值,所以第一个jFrame如下:

public class Frame1 extends javax.swing.JFrame implements ActionListener {
    Frame2 f;
    public Frame1() {
        initComponents();
        this.setLocationRelativeTo(null);
    }
    private void rbtnShowFrame2ActionPerformed(java.awt.event.ActionEvent evt) {                                           
        f = new Frame2();
        f.setVisible(true);
    }
    public void actionPerformed(ActionEvent e) {
        this.dispose(); //I TRIED TO DISPOSING IT HERE BUT DOESN'T WORK
    }
}
因此,我希望在另一个jFrame中,仅当我触发botton执行的事件操作时才处理jFrame1,如果不发生这种情况,我不想处理它,我不知道是否可以使用ActionListener处理它,这是第二个jFrame:

public class Frame2 extends javax.swing.JFrame {
    public Frame2() {
        initComponents();
        this.setLocationRelativeTo(null);
        Frame1 f1 = new Frame1();
        this.cmdOk.addActionListener(cGUI);
    }
    private void cmdOkActionPerformed(java.awt.event.ActionEvent evt) {                                         
        //Here is where i want to dispose() the other jFrame1
        //to create a new instance and pass the value using public static jTextFields
        f1.labelNumeroCotizacion.setText(this.labelNumCotizacionEnviar.getText());
        f1.setVisible(true);
    }
} 

对不起,我的代码,我是使用OOP的新手!感谢大家……

下面是一个如何从另一个JFrame处理JFrame的示例:

import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;

public class Demo
{
  public static void main(String[] args)
  {
    SwingUtilities.invokeLater(new Runnable()
    {
      @Override
      public void run()
      {
        FrameA one = new FrameA();
        FrameB two = new FrameB(one);

        one.setVisible(true);
        two.setVisible(true);
      }
    });
  }
}

class FrameA extends JFrame
{
  private static final long serialVersionUID = 1812279930292019387L;

  public FrameA()
  {
    super("Frame A");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(400, 400);
    setLocationRelativeTo(null);

    setResizable(false);
  }
}

class FrameB extends JFrame
{
  private static final long serialVersionUID = 5126089271972476434L;

  public FrameB(final JFrame otherFrame)
  {
    super("Frame B");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(400, 400);
    setLayout(new GridBagLayout());
    setLocationRelativeTo(otherFrame);

    JButton button = new JButton("Dispose Other");
    button.addActionListener(new ActionListener()
    {
      @Override
      public void actionPerformed(ActionEvent e)
      {
        otherFrame.dispose();
      }
    });

    add(button);

    setResizable(false);
  }
}

旁注:您真的想用另一个框架替换一个框架吗?换个里面的面板怎么样?或者,如果只是关于文本字段值,那么对框架中的字段调用
set
方法如何。我只是想更改jTextFields中的值,但我不知道是否只能使用setter和getter,因为我发现的唯一方法是使用新实例,但我不知道你是否能帮我带来另一个想法,谢谢你的回答!在Frame1中生成文本字段的成员变量。然后给Frame1一个set方法,用于调用
field.setText(text)
的每个字段,或者给Frame1一个大的
setData
方法,其中一个复合对象包含所有作为成员的值。好的,我明白,我遇到的问题是我必须从另一个类创建一个实例,要执行jTextFields的getter和setter,我必须创建一个新对象,并且我不能将值传递给早期的jFrame…您需要在Frame2中保留对Frame1实例的引用。想要处理它或使用setter也是一样的。看看令人敬畏的代码。他正在将FrameA的实例传递给FrameB的构造函数。酷,如果你的问题由这个问题回答,那么接受它来结束这个问题。如果你有任何疑问,也可以在评论部分询问。听着,我不知道该把代码放在哪里,在我的例子中,我想关闭jFrame2按钮中的jFrame1,那么你能给我一个如何把代码放到我的代码中的线索吗?因为我已经试过了,但我做不到!如果您再次看到我的代码,则单击
FrameB
中的按钮,就会关闭
FrameA
。在
按钮中添加
actionListener
,然后调用
jFrame1
上的
dispose
方法。你需要将
jFrame1
的引用传递给你的
jFrame2
类,这样它就可以在
按钮的
actionPerformed
方法中使用它。复制粘贴我的代码到你的IDE中,然后编译并运行它来获得这个想法。很高兴我能提供帮助。:)