paint () в Java-апплете вызывается дважды без причины - PullRequest
0 голосов
/ 09 ноября 2011

Существует ли распространенная причина, по которой метод paint () может вызываться дважды, не будучи намеренным.У меня есть следующий код:

public void paint(Graphics g)
{
     //Graphics2D gg;
     //gg=(Graphics2D) g;

     drawMatrix(g);

}

        private void drawMatrix(Graphics g) {

       int side = 40;
       hex hexagon=new hex();
       for(int i = 0; i<9; i++) 
          for(int k = 0; k<9; k++){ 

            g.setColor(Color.lightGray);
            g.fill3DRect(i*side,k*side, side, side, true);
            if (matrix[i][k]!=null){System.out.println("i is "+i+" k is "+k);
                g.setColor(Color.black);hexagon.DrawHexfromMatrix(g, i, k, Color.black);}
    }   
    }

hex - это класс, расширяющий многоугольник (для моделирования фигуры шестиугольника), а DrawHexfromMatrix - это функция, которая рисует шестиугольник из индекса нарисованной матрицы (поместите шестиугольник в прорезь матрицы).Я могу предоставить весь код, если вы считаете, что это помогает, но сейчас я не понимаю, почему system.out.println выполняется дважды. (Например, если [1] [2] и [2] [3] не выполняютсяnull он напечатает:

    i is 1 k is 2 
    i is 2 k is 3 
    i is 1 k is 2
    i is 2 k is 3  

Я думаю, что это также влияет на мой рисунок, потому что иногда, хотя элемент, существующий в [i], [k] не рисуется (матрица - это матрица из шестнадцатеричного числа).

Позднее редактирование: возможно ли как-то, что g.fill3DRect (i * side, k * side, side, side, true); перекрасить шестиугольники, которые я пытаюсь нарисовать с помощью hexagon.DrawHexfromMatrix (g, i, k, Color.black); ???

1 Ответ

4 голосов
/ 09 ноября 2011

Прежде всего, вы не должны рисовать непосредственно в JApplet.

. Вы должны определить JPanel, который добавляется к JApplet.Вы рисуете до JPanel.

Во-вторых, вы должны использовать метод paintComponent() и вызывать поведение суперкласса, например:

protected void paintComponent(Graphics g) {
    // Paint the default look.
    super.paintComponent(g);

    // Your custom painting here.
    g.drawImage(foregroundImage, x, y, this);
}

В-третьих, у вас нет контролякогда Swing запускает метод paintComponent().Вы должны выполнить вычисления в другом методе и ограничить код в paintComponent() фактическими методами рисования.

...