Java 将焦点从新jFrame转移到上一个jFrame

Java 将焦点从新jFrame转移到上一个jFrame,java,swing,jframe,Java,Swing,Jframe,我有两个JFramesjFrame1和jFrame2,在jFrame1中有一个文本字段和一个按钮,单击按钮jFrame2将出现。在jFrame2中还有一个textfield和一个按钮。我将在jFrame2的textfield中键入一个名称,通过单击其中的按钮,textfield值应显示在jFrame1的textfield上。但我没有把重点转移到jFrame1,我试过代码 在jFrame1中 private void jButton1ActionPerformed(java.awt.event.A

我有两个JFrames
jFrame1
jFrame2
,在jFrame1中有一个文本字段和一个按钮,单击按钮jFrame2将出现。在jFrame2中还有一个textfield和一个按钮。我将在jFrame2的textfield中键入一个名称,通过单击其中的按钮,textfield值应显示在jFrame1的textfield上。但我没有把重点转移到jFrame1,我试过代码

在jFrame1中

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        jFrame2 abc=new jFrame2();
        abc.setVisible(true);
    }   


public void inserting(String name){
   jTextField1.requestFocusInWindow();
   jTextField1.setText(name);

 }
在jFrame2中

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        jFrame1 abc1=new jFrame1();
       // abc1.transferFocus();  //not working

        abc1.inserting(jTextField1.getText());
        this.dispose();
    } 

我正在获取方法
inserting()
的值,但没有将其设置到文本字段中。如果我再次为jFrame1给出
setVisible(true)
,它会工作,但我不想这样做。是否有其他方法解决此问题?

若要使该字段成为焦点,应使用
requestFocusInWindow
,但我认为这不会使相关窗口重新成为焦点

您可以使用
WindowListener
来监视可以响应的更改

例如,在
jFrame1
actionPerformed
处理程序中,您可以

Frame02 frame2 = new Frame02();
frame2.addWindowListener(new WindowAdapter() {

    @Override
    public void windowClosed(WindowEvent we) {

        Frame02 frame2 = (Frame02) we.getWindow();
        jTextField1.setText(frame2.getText());

        toFront();
        jTextField1.requestFocusInWindow();

    }

});

frame2.setVisible(true);
frame2.toFront();
frame2.requestFocus();
jFrame1
正在请求来自
jFrame2
的文本,因为
jFrame2
不知道
jFrame1
,没有对它的引用

jFrame2
中,您需要添加一个
WindowListener
来处理文本字段焦点的请求

addWindowListener(new WindowAdapter() {
    public void windowOpened(WindowEvent we) {
        jTextField1.requestFocus();
    }
});

要使该字段成为焦点,您应该使用
requestFocusInWindow
,但是我认为这不会使相关窗口重新成为焦点

您可以使用
WindowListener
来监视可以响应的更改

例如,在
jFrame1
actionPerformed
处理程序中,您可以

Frame02 frame2 = new Frame02();
frame2.addWindowListener(new WindowAdapter() {

    @Override
    public void windowClosed(WindowEvent we) {

        Frame02 frame2 = (Frame02) we.getWindow();
        jTextField1.setText(frame2.getText());

        toFront();
        jTextField1.requestFocusInWindow();

    }

});

frame2.setVisible(true);
frame2.toFront();
frame2.requestFocus();
jFrame1
正在请求来自
jFrame2
的文本,因为
jFrame2
不知道
jFrame1
,没有对它的引用

jFrame2
中,您需要添加一个
WindowListener
来处理文本字段焦点的请求

addWindowListener(new WindowAdapter() {
    public void windowOpened(WindowEvent we) {
        jTextField1.requestFocus();
    }
});

如果您使用第二个帧只是获取用户的输入,为什么不切换到使用
JOptionPane.showInputDialog()
?您可以将其配置为提供一个
文本字段
和一个
按钮
,并返回一个字符串?使用此值设置第一帧中
JTextField
的值

所以你的第一种方法是这样的:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String inputString = JOptionPane.showInputDialog(this, "Enter Value: ");
    jTextField1.setText(inputString);
}  
我认为这将是一个更简单的解决方案,而不是使用两个帧并在它们之间切换焦点


关于的本教程可能会帮助您更好地了解如何使用输入对话框。

如果您使用第二个帧只是获取用户的输入,为什么不切换到使用
JOptionPane.showInputDialog()
?您可以将其配置为提供一个
文本字段
和一个
按钮
,并返回一个字符串?使用此值设置第一帧中
JTextField
的值

所以你的第一种方法是这样的:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String inputString = JOptionPane.showInputDialog(this, "Enter Value: ");
    jTextField1.setText(inputString);
}  
我认为这将是一个更简单的解决方案,而不是使用两个帧并在它们之间切换焦点


这篇关于输入对话框的教程可能会帮助您更好地了解如何使用输入对话框。

请学习java命名约定并坚持它们。请学习java命名约定并坚持它们。我尝试了toFront和requestFocusInWindow方法。但什么都没有发生。即使我不使用toFront方法,它也能工作。您能告诉我吗在设置frame2.setVisible(true)后,再次设置toFront的相关性是什么?这可能是第二个窗口侦听器的副作用,但在某些系统中,如果焦点仍在第一个帧中,则可能无法将帧移到前面。这只是一个很好的防止这些可能性的方法。我尝试了toFront和requestFocusInWindow方法。但是什么都没有发生。即使我不使用toFront方法也有效。设置frame2.setVisible(true)后,您能告诉我吗再次设置为“前方”有什么关系?这可能是第二个窗口侦听器的副作用,但在某些系统中,如果焦点仍在第一个帧中,则可能无法将帧移到前方。这只是一个很好的防范这些可能性的方法。您的选项很好,但我仅尝试从另一个jframe获取值。您的选项很好,但我仅尝试从另一个jframe获取值。