2013-03-05 30 views
0

文件更新一個JTextField有一個程序,看起來到一個單一的記事本文件,其中包含類似信息:我如何從Java中

Cardiff : 3245658 
Bristol : 4726485 
Manchester : 4728945 

這些地方和數字正走出一個自動化系統,並且數字每20秒左右改變一次。我需要創建一個循環(我猜),這樣當數字發生變化時,我的程序將回顧記事本文件並更新JTextField中的數字。如果不清楚,請提問。

P.S.我已經創建了該程序,以便它查看文件,獲取信息需求並將其放在正確的位置,使用Arraylist,

我需要幫助的是如何使代碼自動更新文件發生了變化,而且我需要在不使用任何類型的Jbutton的情況下執行此操作,只需要自行完成。

我的整個代碼,因爲它代表

package window; 

import java.awt.Color; 
import java.awt.EventQueue; 
import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.concurrent.Executors; 
import java.util.concurrent.ScheduledExecutorService; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class MapTest { 

    private JFrame frame; 
    private JTextField txtCardiff; 
    private JTextField txtBristol; 
    private JTextField txtSheffield; 
    private JTextField txtDerby; 
    private JTextField txtGlasgow; 
    private JTextField txtFalkirk; 
    private JTextField txtNewcastle; 
    private JTextField txtLeeds; 
    private JTextField txtPreston; 
    private JTextField txtManchester; 
    private JTextField txtWolverhampton; 
    private JTextField txtBirmingham; 
    private JTextField txtMiltonKeynes; 
    private JTextField txtPeterborough; 
    private JTextField txtColindale; 
    private JTextField txtStepneyGreen; 
    private JTextField txtSlough; 
    private JTextField txtFaraday; 
    private JTextField txtGuildford; 
    private JTextField txtSouthbank; 
    BufferedReader CSVFile = new BufferedReader(new FileReader(Filepath); 
    ArrayList<String> csv = new ArrayList<String>(); 

    private final ScheduledExecutorService scheduler = 
       Executors.newScheduledThreadPool(1); 

    /** * Launch the application. */ 
    public static void main(String[] args) { 
     try { 
       UIManager.setLookAndFeel(
          UIManager.getSystemLookAndFeelClassName()); 

      } catch (ClassNotFoundException e1) { 
       e1.printStackTrace(); 

      } catch (InstantiationException e1) { 
       e1.printStackTrace(); 

      } catch (IllegalAccessException e1) { 
       e1.printStackTrace(); 

      } catch (UnsupportedLookAndFeelException e1) { 
       e1.printStackTrace(); 
      } 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        MapTest window = new MapTest(); 
        window.frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 

    } 

    /** 
    * Create the application. 
    * 
    * @throws IOException 
    */ 
    public MapTest() throws IOException { 
     try { 
      initialize(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * Initialise the contents of the frame. 
    * 
    * @param output 
    * @throws IOException 
    */ 

    private void initialize() throws IOException { 


       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 
       csv.add(CSVFile.readLine()); 

       System.out.println(csv.get(0)); 
       System.out.println(csv.get(1)); 
       System.out.println(csv.get(2)); 
       System.out.println(csv.get(3)); 
       System.out.println(csv.get(4)); 
       System.out.println(csv.get(5)); 
       System.out.println(csv.get(6)); 
       System.out.println(csv.get(7)); 
       System.out.println(csv.get(8)); 
       System.out.println(csv.get(9)); 
       System.out.println(csv.get(10)); 
       System.out.println(csv.get(11)); 
       System.out.println(csv.get(12)); 
       System.out.println(csv.get(13)); 
       System.out.println(csv.get(14)); 
       System.out.println(csv.get(15)); 
       System.out.println(csv.get(16)); 
       System.out.println(csv.get(17)); 
       System.out.println(csv.get(18)); 
       System.out.println(csv.get(19)); 
       // above system.out's are to check to see if it was reading the right line 


     frame = new JFrame(); 
     frame.setBounds(0, 0, 1000, 1086); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setLayout(null); 
     frame.setBackground(Color.CYAN); 

     txtCardiff = new JTextField(); 
     txtCardiff.setText(csv.get(0)); 
     txtCardiff.setBackground(Color.GREEN); 
     txtCardiff.setBounds(305, 699, 102, 20); 
     frame.getContentPane().add(txtCardiff); 
     txtCardiff.setColumns(10); 

     txtBristol = new JTextField(); 
     txtBristol.setText(csv.get(1)); 
     txtBristol.setBackground(Color.GREEN); 
     txtBristol.setBounds(416, 780, 102, 20); 
     frame.getContentPane().add(txtBristol); 
     txtBristol.setColumns(10); 

     txtSheffield = new JTextField(); 
     txtSheffield.setText(csv.get(2)); 
     txtSheffield.setBackground(Color.GREEN); 
     txtSheffield.setBounds(517, 356, 110, 20); 
     frame.getContentPane().add(txtSheffield); 
     txtSheffield.setColumns(10); 

     txtDerby = new JTextField(); 
     txtDerby.setText(csv.get(3)); 
     txtDerby.setBackground(Color.GREEN); 
     txtDerby.setBounds(582, 451, 90, 20); 
     frame.getContentPane().add(txtDerby); 
     txtDerby.setColumns(10); 

     txtGlasgow = new JTextField();// makes the textfield 
     txtGlasgow.setText(csv.get(4)); 
     txtGlasgow.setBackground(Color.GREEN); 
     txtGlasgow.setBounds(250, 94, 102, 20); 
     frame.getContentPane().add(txtGlasgow); 
     txtGlasgow.setColumns(10); 

     txtFalkirk = new JTextField(); 
     txtFalkirk.setText(csv.get(5)); 
     txtFalkirk.setColumns(10); 
     txtFalkirk.setBackground(Color.GREEN); 
     txtFalkirk.setBounds(331, 41, 102, 20); 
     frame.getContentPane().add(txtFalkirk); 

     txtNewcastle = new JTextField(); 
     txtNewcastle.setText(csv.get(6)); 
     txtNewcastle.setColumns(10); 
     txtNewcastle.setBackground(Color.GREEN); 
     txtNewcastle.setBounds(424, 141, 111, 20); 
     frame.getContentPane().add(txtNewcastle); 

     txtLeeds = new JTextField(); 
     txtLeeds.setText(csv.get(7)); 
     txtLeeds.setColumns(10); 
     txtLeeds.setBackground(Color.GREEN); 
     txtLeeds.setBounds(481, 244, 102, 20); 
     frame.getContentPane().add(txtLeeds); 

     txtPreston = new JTextField(); 
     txtPreston.setText(csv.get(8)); 
     txtPreston.setColumns(10); 
     txtPreston.setBackground(Color.GREEN); 
     txtPreston.setBounds(356, 221, 102, 20); 
     frame.getContentPane().add(txtPreston); 

     txtManchester = new JTextField(); 
     txtManchester.setText(csv.get(9)); 
     txtManchester.setColumns(10); 
     txtManchester.setBackground(Color.GREEN); 
     txtManchester.setBounds(394, 394, 124, 20); 
     frame.getContentPane().add(txtManchester); 

     txtWolverhampton = new JTextField(); 
     txtWolverhampton.setText(csv.get(10)); 
     txtWolverhampton.setColumns(10); 
     txtWolverhampton.setBackground(Color.GREEN); 
     txtWolverhampton.setBounds(360, 486, 153, 20); 
     frame.getContentPane().add(txtWolverhampton); 

     txtBirmingham = new JTextField(); 
     txtBirmingham.setText(csv.get(11)); 
     txtBirmingham.setColumns(10); 
     txtBirmingham.setBackground(Color.GREEN); 
     txtBirmingham.setBounds(424, 553, 128, 20); 
     frame.getContentPane().add(txtBirmingham); 

     txtMiltonKeynes = new JTextField(); 
     txtMiltonKeynes.setText(csv.get(12)); 
     txtMiltonKeynes.setColumns(10); 
     txtMiltonKeynes.setBackground(Color.GREEN); 
     txtMiltonKeynes.setBounds(474, 604, 135, 20); 
     frame.getContentPane().add(txtMiltonKeynes); 

     txtPeterborough = new JTextField(); 
     txtPeterborough.setText(csv.get(13)); 
     txtPeterborough.setColumns(10); 
     txtPeterborough.setBackground(Color.GREEN); 
     txtPeterborough.setBounds(655, 576, 135, 20); 
     frame.getContentPane().add(txtPeterborough); 

     txtColindale = new JTextField(); 
     txtColindale.setText(csv.get(14)); 
     txtColindale.setColumns(10); 
     txtColindale.setBackground(Color.GREEN); 
     txtColindale.setBounds(541, 699, 107, 20); 
     frame.getContentPane().add(txtColindale); 

     txtStepneyGreen = new JTextField(); 
     txtStepneyGreen.setText(csv.get(15)); 
     txtStepneyGreen.setColumns(10); 
     txtStepneyGreen.setBackground(Color.GREEN); 
     txtStepneyGreen.setBounds(667, 699, 137, 20); 
     frame.getContentPane().add(txtStepneyGreen); 

     txtSlough = new JTextField(); 
     txtSlough.setText(csv.get(16)); 
     txtSlough.setColumns(10); 
     txtSlough.setBackground(Color.GREEN); 
     txtSlough.setBounds(525, 756, 102, 20); 
     frame.getContentPane().add(txtSlough); 

     txtFaraday = new JTextField(); 
     txtFaraday.setText(csv.get(17)); 
     txtFaraday.setColumns(10); 
     txtFaraday.setBackground(Color.GREEN); 
     txtFaraday.setBounds(650, 756, 102, 20); 
     frame.getContentPane().add(txtFaraday); 

     txtGuildford = new JTextField(); 
     txtGuildford.setText(csv.get(18)); 
     txtGuildford.setColumns(10); 
     txtGuildford.setBackground(Color.GREEN); 
     txtGuildford.setBounds(525, 822, 102, 20); 
     frame.getContentPane().add(txtGuildford); 

     txtSouthbank = new JTextField(); 
     txtSouthbank.setText(csv.get(19)); 
     txtSouthbank.setColumns(10); 
     txtSouthbank.setBackground(Color.GREEN); 
     txtSouthbank.setBounds(655, 807, 115, 20); 
     frame.getContentPane().add(txtSouthbank); 

     JLabel lblNewLabel = new JLabel("New label"); 
     lblNewLabel.setForeground(Color.BLACK); 
     lblNewLabel.setBackground(Color.BLACK); 
     lblNewLabel 
       .setIcon(new ImageIcon(
         "FilePath 
     lblNewLabel.setBounds(33, 11, 890, 1086); 
     frame.getContentPane().add(lblNewLabel); 
    } 
} 
+0

大家好,這可能是重複的,但不需要downvote。 +1從我這裏刪除反對 – 2013-03-06 17:39:48

回答

0

這是一件容易的事。我對WatchService一無所知,但也可以使用Timer來完成。創建一個Timer,它將每20秒尋找記事本。您必須以編程方式檢查數字是否已更改。

+0

你將如何編碼計時器? ive以前從未使用過,感謝您給我提供的更多幫助 – Wilson 2013-03-06 08:53:45

+0

@Wilson:使用計時器安排任務。這包含一個例子http://stackoverflow.com/questions/4044729/java-timer-task-schedule – 2013-03-06 17:33:24