我有两个 JFrame jFrame1
和 jFrame2
,在 jFrame1 中有一个文本字段和一个按钮,点击按钮 jFrame2 就会出现。在 jFrame2 中还有一个文本字段和一个按钮。我将在 jFrame2 的文本字段中键入一个名称,然后单击其中的按钮,该文本字段值应该出现在 jFrame1 的文本字段上。但我没有将焦点转移到 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();
}
});
关于java - 将焦点从新的 jFrame 转移到前一个 jFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11982650/