2014-12-22 103 views
0

我想更新的JLabel和JTextField中使用setText()方法,但它不能正常工作。但是,其他代碼正在工作。代碼如下;的JLabel和JTextField中的setText不更新

btnDosyaSe.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       JFileChooser jfc = new JFileChooser(); 
       jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); 

       int kullaniciSecimi = jfc.showOpenDialog(null); 
       if (kullaniciSecimi == JFileChooser.APPROVE_OPTION) { 
        File fileName = jfc.getSelectedFile(); 
        textField.setText(fileName.getPath()); 
        islemSureci.setText("Veriler Okunuyor..."); 

        try { 

         ArrayList<ArrayList<String>> tumYazılar = rwd.readTXT(fileName.getPath()); 
         String[] yazarlar = rwd.yazarlar(fileName.getPath()); 
         islemSureci.setText("Veriler Okundu! Öznitelik çıkarımına başlandı..."); 

         oznitelikler = oc.oznitelikleriBul(tumYazılar, yazarlar); 
         islemSureci.setText("Öznitelikler Çıkarılmıştır!"); 
         //String text = readTXT(fileName); 

        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 
      } 
     }); 

在這裏,islemSureci是JLabel,textFiled是JTextField。當它們被設置時,它不起作用。在代碼完成所有工作後,它們就會出現。請你說說是什麼原因?

回答

1

我覺得你意味着 「所有的工作完成後,」從文件(你註釋行)加載文本。我認爲這段代碼工作正常,因爲在設置文本之後你什麼都不做。 如果它是真的,您可以使用另一個線程來加載文本。

如果oc.oznitelikleriBul()需要很長時間,您可以在不同的線程中編寫該行和文本設置行。但是,在這種情況下,請務必在新線程的EDT中運行文本設置行。

0

我有同樣的問題。我是如何解決見下圖:

我有2個班的JFrame。 Login.java和Employee.java。登錄後,我無法將SetText()設置爲Employee Form中的JTextField對象。所以我做了什麼...我用這個代碼使用了setVisible()員工表單。現在我可以刷新我的JTextField。

感謝,我希望它會解決這個問題。

java.awt.EventQueue.invokeLater(new Runnable() { 
    public void run() { 
     new Employee().setVisible(true); 
    } 
});