0

私は2つの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()に値を取得していますが、テキストフィールドに設定されていません。私が再びsetVisible(true)jFrame1に与えるとうまくいきますが、私はそのようにしたくありません。これを解決する他の方法はありますか?

4

2 に答える 2

2

JOptionPane.showInputDialog()2 番目のフレームを使用してユーザーの入力を受け取るだけの場合は、 ?の使用に切り替えてみませんか。これを構成して、 aTextFieldと aを提供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 に答える
2

フィールドにフォーカスを移動するには、を使用する必要がrequestFocusInWindowありますが、問題のウィンドウにフォーカスが戻るとは思いません。

を使用して、WindowListener対応できる変更を監視できます。

たとえば、jFrame1actionPerformedハンドラーで次のことができます

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();
    }
});
于 2012-08-16T07:47:04.023 に答える