Search code examples
javagraphics2d

How to draw a line in java?


I want to draw a line in java in eclipse. I made this code but I am getting error in line : paint2d.add(paintComponent());

import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Game extends JPanel {

    public void paintComponent (Graphics2D g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.drawLine(30, 40, 80, 100);
    }

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.setSize(400, 420);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Game paint2d = new Game();
        paint2d.add(paintComponent()); // The method paintComponent(Graphics2D) in the type Game is not applicable for the arguments ()
        frame.setVisible(true);
    }
}

How to fix that error?

Is my code suitable for the purpose of drawing a line?

Thanks.


Solution

  • You're not overriding the method correctly. The argument to paintComponent is of type Graphics, not Graphics2D, but you can cast to Graphics2D. Also you need to add the Game panel to the frame as a content pane:

    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class Game extends JPanel
    {
    
        @Override
        public void paintComponent(Graphics g)
        {
            Graphics2D g2 = (Graphics2D) g;
            g2.setColor(Color.BLACK);
            g2.drawLine(30, 40, 80, 100);
        }
    
        public static void main(String[] args)
        {
            JFrame frame = new JFrame();
            frame.setSize(400, 420);
            frame.setLocationRelativeTo(null);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
            Game game = new Game();
            frame.setContentPane(game);
    
            frame.setVisible(true);
            frame.invalidate();
        }
    
    }