public void drawU(UGraphic ug) {
    final StringBounder stringBounder = ug.getStringBounder();
    final Component comp = getComponent(stringBounder);
    final Dimension2D dim = comp.getPreferredDimension(stringBounder);
    final Area area = new Area(dim.getWidth(), dim.getHeight());
    tile.drawU(ug);
    final Real p = getNotePosition(stringBounder);

    comp.drawU(ug.apply(new UTranslate(p.getCurrentValue(), 0)), area, (Context2D) ug);
  }
 public double getPreferredHeight(StringBounder stringBounder) {
   final Component comp = getComponent(stringBounder);
   final Dimension2D dim = comp.getPreferredDimension(stringBounder);
   return Math.max(tile.getPreferredHeight(stringBounder), dim.getHeight());
 }
 public Real getMaxX(StringBounder stringBounder) {
   final Component comp = getComponent(stringBounder);
   final Dimension2D dim = comp.getPreferredDimension(stringBounder);
   return getNotePosition(stringBounder).addFixed(dim.getWidth());
 }
 private Real getNotePosition(StringBounder stringBounder) {
   final Component comp = getComponent(stringBounder);
   final Dimension2D dim = comp.getPreferredDimension(stringBounder);
   return livingSpace.getPosC(stringBounder).addFixed(-dim.getWidth());
 }