Java 将焦点从新jFrame转移到上一个jFrame
我有两个JFramesJava 将焦点从新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
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获取值。