GraphicsCallback$PaintCallback(SunGraphicsCallback).runOneComponent(Component, Rectangle, Graphics, Shape, int) line: 78 GraphicsCallback$n(Component, Graphics) line: 39 JRootPane(JComponent).paint(Graphics) line: 1040 RepaintManager.paint(JComponent, JComponent, Graphics, int, int, int, int) line: 1206 RepaintManager$PaintManager.paint(JComponent, JComponent, Graphics, int, int, int, int) line: 1413 RepaintManager$PaintManager.paintDoubleBuffered(JComponent, Image, Graphics, int, int, int, int) line: 1482 JRootPane(JComponent).paintToOffscreen(Graphics, int, int, int, int, int, int) line: 5228 JRootPane(JComponent).paintChildren(Graphics) line: 887 JLayeredPane(JComponent).paint(Graphics) line: 1063 JLayeredPane(JComponent).paintChildren(Graphics) line: 887 JPanel(JComponent).paint(Graphics) line: 1063 JPanel(JComponent).paintChildren(Graphics) line: 887 TestPaint(JComponent).paint(Graphics) line: 1054 TestPaint.paintComponent(Graphics) line: 15
#HOW TO ACCESS PAINT IN MAC CODE#
Just for info, here is the stacktrace that I got from the example of code I posted at the end: Thread (Suspended (breakpoint at line 15 in TestPaint))
Then travel up the stacktrace and see how provides the Graphics parameter. Use a debugger and put a breakpoint in the paintComponent method.I guess my point here is to make sure that you can't do something with native JComponents and Layouts before you go off trying to roll your own custom-rendered components. I admit that there are custom rendering tasks that require such granularity, but Java Swing does offer a (fairly) robust set of JComponents and Layouts that can be used to do much of the heavy lifting without having to directly override paintComponent. In my experience, paintComponent is rarely directly overridden. The closest I've come is using the repaint() methods to programmatically trigger a repaint of certain components (which I assume calls the correct paintComponent methods downstream. I've worked with Swing for many years, and I don't think I've ever called paintComponent directly, or even seen it called directly from something else. Many of these events are detected auto-magically, and paintComponent is called internally when it is determined that that operation is necessary. There are a number of factors that determine when a component needs to be re-painted, ranging from moving, re-sizing, changing focus, being hidden by other frames, and so on and so forth. The (very) short answer to your question is that paintComponent is called "when it needs to be." Sometimes it's easier to think of the Java Swing GUI system as a "black-box," where much of the internals are handled without too much visibility.