// Determine the selected and unselected areas
Area selection = textAreaSkin.getSelection();
Area selectedArea = selection.createTransformedArea(AffineTransform.getTranslateInstance(-x, -y));
Area unselectedArea = new Area();
unselectedArea.add(new Area(new Rectangle2D.Float(0, 0, width, height)));
unselectedArea.subtract(new Area(selectedArea));
// Paint the unselected text
Graphics2D unselectedGraphics = (Graphics2D)graphics.create();
unselectedGraphics.clip(unselectedArea);
paint(unselectedGraphics, focused, editable, false);