我有两个JFrame jFrame1
和jFrame2
,在jFrame1中有一个文本字段和一个按钮,同时会出现点击按钮jFrame2。在jFrame2中还有一个文本字段和一个按钮。我将在jFrame2的文本字段中键入一个名称,并通过单击其中的按钮,文本字段值应出现在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)
它可行,但我不想这样做。有没有其他方法可以解决这个问题?
答案 0 :(得分:2)
要将焦点带到该字段,您应该使用requestFocusInWindow
,但我不认为这会使有问题的窗口重新成为焦点。
您可以使用WindowListener
来监控可以响应的更改。
例如,在jFrame1
的{{1}}处理程序中,您可以
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();
}
});
答案 1 :(得分:2)
如果您使用第二帧来获取用户的输入,为什么不切换到使用JOptionPane.showInputDialog()
?你可以配置它来给你一个TextField
和一个Button
并返回一个字符串?使用此值可以设置第一帧中JTextField
的值。
所以你的第一种方法是这样的:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
String inputString = JOptionPane.showInputDialog(this, "Enter Value: ");
jTextField1.setText(inputString);
}
我认为这个是一个更简单的解决方案,而不是使用几个帧并在它们之间切换焦点。
关于"Getting the User's Input from a Dialog"的本教程可能会帮助您更好地了解使用输入对话框。