0

我想连续读取文本文件,并在读取某一行时更改我在画布上显示的框的颜色(文本文件将不断更新)。现在,我在画布上绘制了一个绿色正方形,在文本文件中绘制了三个“测试”行,当它到达文本文件的第三行时,我想将正方形更改为红色。

这是我的代码,来自两个文件(myCanvas.java 和 myFileReader.java)。非常感谢正确方向的任何一点。

public class myCanvas extends Canvas{

    public myCanvas(){
    }

    public void paint(Graphics graphics){
        graphics.setColor(Color.green);
        graphics.fillRect(10, 10, 100, 100);
        graphics.drawRect(10,10,100,100);
    }

    public static void main(String[] args){
        myCanvas canvas = new myCanvas();
        JFrame frame = new JFrame("Live GUI");
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(canvas);
        frame.setVisible(true);
        myFileReader read = new myFileReader();
        read.readFromFile();
        if(myFileReader.strLine == "This is the third line."){
        //change color
        }

}



public class myFileReader{
    public static String strLine;

public void readFromFile() 
{
    try{
        FileInputStream fstream = new FileInputStream(System.getProperty("user.dir")+"\\sample.txt");
        DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        while (true){
            strLine = br.readLine();
            if(strLine == null) {
                Thread.sleep(1000);
            }
        }
        }
    catch (Exception ex){
        System.err.println("Error: " + ex.getMessage());
    }
    }
}
4

3 回答 3

0

每次读取一行时,只需添加一个计数器并增加它。当计数器到达第三行时,使用 if 语句来完成您的任务

于 2012-06-14T17:31:03.180 回答
0

试试这个

1.Use BreakIterator class, with its static method getLineInstance(), 
  this will help you identify every line in the file.

2. Create an HashMap with the colour as Key, and its RGB as Value.

3. Parse every word in the line, which is obtained from
   BreakIterator.getLineInstance().

4. Compare it with the Key in the HashMap, 
   if the word in the line happens to match the Key in
   the HashMap, then colour the box with the Value of the Key.
于 2012-06-14T18:09:24.703 回答
0

这是一种无需对代码进行太多更改即可完成的方法。

  1. MyCanvas在您的类中创建一个名为currentColortype的局部变量Color。仅供参考,Java 中的约定是类名以大写字母开头。
  2. 更新您的paint()方法以将矩形的颜色设置为新变量currentColor,而不是静态绿色值。
  3. 在您的主要方法中,您可以执行canvas.currentColor = <new color here>;然后canvas.repaint(). repaint()函数调用将擦除画布并使用您的函数重新绘制它paint()

我认为您FileReader不会很好地处理不断修改的文件。

于 2012-06-14T19:41:32.133 回答