Почему paintComponent рисует все фигуры одну за другой? - PullRequest
0 голосов
/ 26 апреля 2019

Я работаю над Java-интерфейсом с программированием сокетов. Я рисую фигуры на стороне клиента с данными с сервера. Сначала я поместил входящие данные в массив, а затем попытался нарисовать его. Моя проблема в том, что я хочу нарисовать все фигуры в списке, но каждый элемент теряется после рисования. Я хочу нарисовать все фигуры, которые я не хочу видеть одну за другой. Мой код на стороне клиента;

  public void starteGame(String received) {

    Info.shapes = new ArrayList<Shape>();

    String[] mParsed = received.split(" ");
    int width = Integer.parseInt(mParsed[2]);
    int height = Integer.parseInt(mParsed[1]);
    int x1 = Integer.parseInt(mParsed[3]);
    int y1 = Integer.parseInt(mParsed[4]);
    int x2 = Integer.parseInt(mParsed[5]);
    int y2 = Integer.parseInt(mParsed[6]);
    int randomShape = Integer.parseInt(mParsed[7]);
    Color firstColor = new Color(Integer.parseInt(mParsed[8]), true);
    Color secondColor = new Color(Integer.parseInt(mParsed[9]), true);
    boolean cyclic = Boolean.parseBoolean(mParsed[10]);

    Shape shapeEx = new Shape(randomShape, x1, y1, x2, y2, firstColor, 
secondColor, cyclic);

    Info.shapes.add(shapeEx);

    showShapes(width, height);


}

public void showShapes(int height, int width) {

    JFrame frame = new JFrame();


        PanelDraw panel = new PanelDraw(width, height );

        frame.add(panel);

        frame.setSize(width, height);
        frame.setBackground(Color.RED);
        frame.setUndecorated(true);
        frame.setLocation(0, 400);
        frame.setVisible(true);


}

И еще одна функция;

public class PanelDraw extends JPanel  {

private MyShape myShape;
int width;
int height;
// constructor, creates a panel with random shapes
public PanelDraw(int width, int height) {
    this.width = width;
    this.height = height;

    setBackground( Color.BLACK );   
} // end DrawPanel constructor

// end method

// for each shape array, draw the individual shapes
@Override
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    boolean filled = true;

    for (Shape shape : Info.shapes) {

        switch (shape.Type) {
            case 1:

                myShape = new MyPolygon(shape.X1, shape.Y1, shape.X2, shape.Y2, shape.FirstColor, filled);
                break;
            case 2:
                myShape = new MyRectangle(shape.X1, shape.Y1, shape.X2, shape.Y2, shape.FirstColor, filled);
                break;
            case 3:
                myShape = new MyOval(shape.X1, shape.Y1, shape.X2, shape.Y2, shape.FirstColor, filled);
                break;
        }

        Graphics2D g2d = (Graphics2D) g; // cast g to Graphics2D
        g2d.setPaint(new GradientPaint(shape.X1, shape.Y1, shape.FirstColor, shape.X2, shape.Y2,
                shape.SecondColor, shape.cyclic));
        myShape.draw(g2d);


    }


} // end method paintComponent

}

Вы можете мне помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...