2016-09-19 2 views
0

私はJTextFieldを持っており、ボタンを押してファイル選択ツールが選択したファイルを返すときに実行時にsetTextを使いたいと思います。問題は、ファイルが選択されているときにTextFieldが更新されていないことです。JTextField setTextが機能しません

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {           
    jFileChooser1=new JFileChooser(); 
    jTextField1=new JTextField(); 
    jFileChooser1.showOpenDialog(myJFrame.this); 
    File f=jFileChooser1.getSelectedFile(); 
    String filePath=f.getAbsolutePath(); 
    System.out.println(filePath); 
    jTextField1.setText((filePath)); 
    jTextField1.setVisible(true); 
    System.out.println(jTextField1.getText()); 

} 

デバッグログは正しい値、ファイルパス名を返します。ありがとう。

+0

printlnステートメントにはありますか? –

+1

また、あなたは何にもtextFieldを追加していないので、表示されません。 –

+2

このメソッドの内部で 'jTextField1'をインスタンス化しないでください。宣言時に' JTextField jTextField1 = new JTextField(); 'のように一度だけインスタンス化してください。 – Berger

答えて

0

最後にsetVisibleに電話する必要があります。また、フィールドが既に作成され、表示されている場合は、.repaint().validate()を呼び出してみてください。

+0

ご覧のとおり、ログ前の私の最後の指示はsetVisibleです。 repaint()が動作していません –

+0

私の答えを編集しました。また、 '.validate()'を試してみてください - もっとコードを投稿できますか? – Eskir

2

actionPerformedは、イベントループで処理されます。テキスト操作を延期する。

また、作成されたJTextFieldが存在し、そのウィンドウに追加されている可能性があります。 新しい場所が追加されずに作成されます。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    EventQueue.invokeLater(new Runnable() { 

     @Override 
     public void run() {   
      JFileChooser fileChooser = new JFileChooser(); 
      //jTextField1 = new JTextField(); 
      if (fileChooser.showOpenDialog(myJFrame.this) == JFileChooser.APPROVE_OPTION) { 
       File f = fileChooser.getSelectedFile(); 
       String filePath = f.getAbsolutePath(); 
       jTextField1.setText((filePath)); 
       //jTextField1.setVisible(true); 
      } 
     }   
    }); 
} 

のJava 8:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    EventQueue.invokeLater(() -> { 
      JFileChooser fileChooser = new JFileChooser(); 
      //jTextField1 = new JTextField(); 
      if (fileChooser.showOpenDialog(myJFrame.this) == JFileChooser.APPROVE_OPTION) { 
       File f = fileChooser.getSelectedFile(); 
       String filePath = f.getAbsolutePath(); 
       jTextField1.setText((filePath)); 
       //jTextField1.setVisible(true); 
      } 
    }); 
} 
0

宣言し、あなたのデフォルトコンストラクタまたはグローバル変数としてjTextField1をインスタンス化します。例:

public class Main { 

    JTextField jTextField1 = new JTextField();//declaring as global varible 
    public Main(){ 
     //jTextField1 = new JTextField();//can be instantiated here if it is already declared as global variable 
    } 

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
     jFileChooser1 = new JFileChooser(); 
     jFileChooser1.showOpenDialog(myJFrame.this); 
     File f = jFileChooser1.getSelectedFile(); 
     String filePath = f.getAbsolutePath(); 
     System.out.println(filePath); 
     jTextField1.setText((filePath)); 
     jTextField1.setVisible(true); 
     System.out.println(jTextField1.getText()); 

    } 
    //other methods and code goes here. 
} 
関連する問題