@Override
        protected void paintComponent(Graphics g)
        {
            final double HALF_PANEL_WIDTH_DOUBLE = PANEL_WIDTH/2;
            final double HALF_PANEL_HEIGHT_DOUBLE = PANEL_HEIGHT/2;

            Graphics2D g2d = (Graphics2D) g;
            g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

            drawGrid(g2d);

            g2d.setColor(Color.GRAY);
            for (GraphPoint point : graph.getPoints())
            {
                int x = (int)((point.features[0] + 1)* HALF_PANEL_WIDTH_DOUBLE);
                int y = (int)((point.features[1] + 1)* HALF_PANEL_HEIGHT_DOUBLE);
                
                for (GraphPoint secondPoint : point.getEdges())
                {
                    int x2 = (int)((secondPoint.features[0] + 1)* HALF_PANEL_WIDTH_DOUBLE);
                    int y2 = (int)((secondPoint.features[1] + 1)* HALF_PANEL_HEIGHT_DOUBLE);
                    g2d.drawLine(x, y, x2, y2);
                }
            }

            
            for (GraphPoint point : graph.getPoints())
            {
                g2d.setColor(point.classification < 0 ? Color.BLUE : Color.RED);

                int x = (int)((point.features[0] + 1) * HALF_PANEL_WIDTH_DOUBLE);
                int y = (int)((point.features[1] + 1) * HALF_PANEL_HEIGHT_DOUBLE);

                g2d.fillOval(x - POINT_SIZE/2, y - POINT_SIZE/2, POINT_SIZE, POINT_SIZE);
            }
        }