Cambiando la forma en que Nimbus LaF maneja el resaltado del nodo JTree

He estado trabajando para hacer una transición de una aplicación Java de WindowsLookAndFeel a Nimbus, en gran parte con éxito, a pesar de las debilidades de Nimbus. A mis usuarios en general les gusta el Nimbus LaF, pero no me gustaron algunos detalles, algunos de los cuales cambié al consultar preguntas anteriores en este sitio. Ejemplo: copié LeafIcon, ClosedIcon y OpenIcon de Windows LaF (que les gustó) y los uso en la versión Nimbus, para una buena combinación de LaFs.

Atrapado en un último (?) Problema.

Tengo un JTree con un DefaultCellRenderer subclasificado para crear las pantallas de nodo apropiadas. Esto funciona bien bajo WindowsLookAndFeel.

Problema: en WindowsLaF, cuando se selecciona un nodo, el texto del nodo se resalta y el efecto es visualmente fácil de entender. En Nimbus, cuando se selecciona un nodo, el resaltado se realiza con una barra de color (bastante oscuro) que se ejecuta en el ancho de la ventana del árbol (no solo el ancho del texto), y el efecto es desconcertante.

Por lo tanto: simplemente quiero que el tratamiento con WindowsLaF para el resaltado del nodo JTree en el Nimbus LaF (es decir, con fondo de color solo el ancho del texto, y preferiblemente en un color mejor que el que pueda elegir). Sospecho que esto significa que necesito asignar el pintor correcto a "Tree: TreeCell [Focused + Selected] .backgroundPainter", pero no sé cómo escribirlo.

Sugerencias bienvenidas.

EDITAR

¡Mira el extraño resaltado de nodo seleccionado con Java 7!

<code>public class TreeBorder {
    public static void main( String[] args ) {
        try{
            for( UIManager.LookAndFeelInfo info : UIManager.getInstalledLookAndFeels() ) {
                if( "Nimbus".equals( info.getName() ) ) {
                    UIManager.setLookAndFeel( info.getClassName() );
                    break;
                }
            }
        } catch( Exception e ) {
            e.printStackTrace();
        }
        SwingUtilities.invokeLater( new Runnable() {
            @Override
            public void run() {
                JFrame f = new JFrame();
                f.setLocationRelativeTo( null );
                f.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
                f.getContentPane().add( getJTree() );
                f.pack();
                f.setVisible( true );
            }
            private JTree getJTree() {
                JTree jTree = new JTree();
                jTree.setCellRenderer( new LocalRenderer() );
                return jTree;
            }
        } );
    }

    private static class LocalRenderer extends DefaultTreeCellRenderer {
        @Override
        public Component getTreeCellRendererComponent( JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasfocus ) {
            DefaultTreeCellRenderer result = (DefaultTreeCellRenderer)super.getTreeCellRendererComponent( tree, value, sel, expanded, leaf, row, hasfocus );
                if( true ) {
                    result.setFont( new JLabel().getFont() );
                    Icon icon = UIManager.getIcon("FileView.floppyDriveIcon");
                    result.setIcon( icon );
                }
            return(result);
        }
    }
}
</code>

Respuestas a la pregunta(1)

Su respuesta a la pregunta