I’ve been searching for a few hours, including at other questions on stack such as. I need simplest way to draw a line in java in AWT panel
but couldn’t find my answer.
I have a panel gridbaglayout with multiple dynamically generated components. The class extends JFrame and thus can’t extends JPanel as in the question above.
After all the components are added I need to draw lines from 1 to the other,
I got all the coordinates but can’t seem to paint a line.
when using this:
public void paint(Graphics g) { g.drawline(100,100,200,200) //I used static values to test first. }
a Line will be drawn but the other components are not shown.
When I do this (in the constructor after adding all components etc..):
Graphics g = getGraphics(); //class extends JFrame thus I can call getGraphics() directly. g.drawLine(100,100,400,400); //again static values for test purposes.
All my components are shown but the line isn’t. -> just the same as without the code.
What would be a valid solution for me to call a method with the x1 x2 y1 y2 as paremeters that draws a line in the panel (or frame) with the already existing components?
Advertisement
Answer
What you should do is:
- Override
paintComponent()
instead ofpaint()
. - First line of
paintComponent
should call the parent constructor. - Then draw your line.
So it should be something along the lines of:
public void paintComponent(Graphics g) { super.paintComponent(g); // this will paint your components g.drawLine(100,100,400,400); // this will paint your line }
For more information you should check out the Custom Painting Tutorial.