将焦点从新jFrame转移到之前的jFrame

时间:2012-08-16 07:37:42

标签: java swing jframe

我有两个JFrame jFrame1jFrame2,在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)它可行,但我不想这样做。有没有其他方法可以解决这个问题?

2 个答案:

答案 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 jFrame2jFrame2不知道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"的本教程可能会帮助您更好地了解使用输入对话框。