0

我有两个 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()的价值,但它没有被设置到文本字段中。如果我再次setVisible(true)为 jFrame1 捐款,它会起作用,但我不想那样做。有没有其他方法可以解决这个问题?

4

2 回答 2

2

要将焦点集中在该领域,您应该使用requestFocusInWindow,但是我认为这不会使有问题的窗口重新成为焦点。

您可以使用 aWindowListener来监控您可以响应的更改。

例如,在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();

jFrame1jFrame2正在从原因请求文本jFrame2不知道jFrame1,没有引用它。

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

addWindowListener(new WindowAdapter() {
    public void windowOpened(WindowEvent we) {
        jTextField1.requestFocus();
    }
});
于 2012-08-16T07:47:04.023 回答
2

如果您使用第二帧来获取用户的输入,为什么不切换到使用JOptionPane.showInputDialog()? 您可以将其配置为给您一个TextField和一个Button并返回一个字符串?使用此值设置JTextField第一帧中的值。

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

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    String inputString = JOptionPane.showInputDialog(this, "Enter Value: ");
    jTextField1.setText(inputString);
}  

我认为这将是一个更简单的解决方案,而不是使用几帧并在它们之间切换焦点。

本教程关于“从对话框中获取用户的输入”可能会帮助您更好地了解如何使用输入对话框。

于 2012-08-16T08:36:53.987 回答