2015-04-21 3 views
1

У меня проблема в java, где каждый раз, когда метод вызывается в классе paint, он обновляет координаты для прямоугольника, а затем должен его нарисовать.Краска прямоугольника каждый раз, когда метод называется

В настоящий момент все, что я получаю, - это метод, улучшающий координаты. Но отображается только один прямоугольник, последний из которых обновляется.

Как я могу создать прямоугольник для каждого вызова методов, а не только на последней итерации?

В моем основном классе у меня есть следующий код, который считывает данные из файла. Она читает одну строку, то вызывает класс краски, чтобы нарисовать прямоугольник, прежде чем читать следующий

try (BufferedReader br = new BufferedReader(new FileReader("numbers.txt"))) 
{ 
    String line; 

    while ((line = br.readLine()) != null) { 
     int change2Int=Integer.parseInt(line.trim()); 
     mp.getDataForDisplay(change2Int);//send to paint class 
    } 
} 
catch (Exception expe) 
{ 
    expe.printStackTrace(); 
} 

В файле numbers.txt только дома:

0 
3 
5 
2 

Класс краска:

class mainPanel extends JPanel 
{ 
    int processes, storedProcesses; 

    // for rectangles 
    int xCoor =0; 
    int yCoor =0; 
    int width =10; 
    int height =50; 

    static int x = 100; 
    int [] y = {100,150,200,250,300,350,400,450,500,550}; 

//constructor and other irrelevant methods here 
public void getDataForDisplay (int proc) 
{ 
    //the method checks the value from "proc" to see where to display a rectangle on screen. Only prints last rectangle to screen 
    int loop = 0; 

    while (loop <= storedProcesses) 
    { 
     if (proc == loop) 
     { 
      xCoor = x; 
      yCoor = y[loop]; 
      x = x + 10; 
      System.out.println("right"); 
      repaint(); 
     } 
     else 
     { 
      System.out.println("wrong"); 
     } 

     loop++; 
    } 

    System.out.println("OK WERE HERE"); 
    repaint(); 
} 

public void paintComponent(Graphics g) { 
    super.paintComponent(g); 

    g.setColor(Color.RED); 
    g.fillRect (xCoor, yCoor, width, height); 
} 
+0

Пожалуйста, придерживайтесь [Соглашения о присвоении имен Java] (http://www.oracle.com/technetwork/java/codeconventions-135099.html). –

+0

Какую ценность занимает «storeProc»? Условия «в то время» и «если» соответствуют значению? – Journey

+0

он читает из текстового файла INT, как показано выше. – lecardo

ответ

3

Существует два общих подхода

  1. Вам нужно сохранить список Rectangles для рисования и повторения в списке каждый раз.
  2. Нарисуйте Rectangle в BufferedImage и нарисуйте BufferedImage.

Отъезд Custom Painting Approaches для рабочих примеров обоих этих подходов.

+0

Я более или менее использую первый пункт. Я думал, что держу список? – lecardo

+0

@lecardo, 'Я думал, что у меня есть список?", Может быть, это ваш, но ваш метод paintComponent() не перебирает список. Вы специально кодируете одно заявление о картировании, так что только один объект будет когда-либо нарисован. Если вы хотите разбить несколько объектов, вам нужно перебирать список. Посмотрите на приведенные мной примеры. – camickr

+0

Было бы возможно, если вы в состоянии дать ему шанс? Мне не повезло здесь =/ – lecardo

Смежные вопросы