2012-08-20 8 views
18

Estoy manteniendo un poco de código para implementar un Look and Feel personalizado en Java. Mientras se hace una actualización reciente de la versión de Java (por otras razones) me encontré con que la apariencia se rompió debido a un campo que no se encuentra enaspecto de Java: cómo romper una dependencia en sun.swing.SwingUtilities2

sun.swing.SwingUtilities2.BASICMENUITEMUI_MAX_TEXT_OFFSET; 

Se trata de una clase que se basa estrechamente en BasicMenuItemUI.layoutMenuItem() alrededor de Java 6u02 (here's the source). He encontrado que Oracle ha vuelto a factorizar su código para incluir un MenuItemLayoutHelper en la nueva versión de destino que estoy usando, Java 6u31.

Podría simplemente usar el MenuItemLayoutHelper pero eso no resuelve el problema, solo lo apaga hasta la próxima vez que se cambien las partes internas de Java. Por lo tanto, he descartado esto como una solución.

Estoy buscando algunos consejos sobre cómo lograr un diseño de izquierda a derecha similar a BasicMenuItemUI sin necesidad de conocer el desplazamiento de texto máximo de los padres (eliminando la mala dependencia de sun.swing.SwingUtilities).

+17

probablemente no sea una opción para agarrar a la persona que introdujo esa dependencia, encerrarla en una habitación hasta que todo esté arreglado :-) Al final del día, no hay mucho que hacer ... excepto ... tos .. c & p, ehh, me refiero a mirar el código de sol e implementar una versión refactorizada. – kleopatra

+9

@kleopatra Mi madre me advirtió ** no ** para "mirar el sol". (musas) Sin embargo, ella no mencionó el "código". –

+0

Ouch ... este es el hijo del póster para el cumplimiento de los estándares del código de tiempo de compilación. – Gus

Respuesta

4

Como dijo albfan, no puedes. Usted tiene que depender del código, copiar la clase y usarla en su programa, no usarla en absoluto y usar una biblioteca de terceros, o no usar esa característica.

2

Ok, puede que haya pasado un tiempo, pero me di cuenta de que podía usar mi propia constante en lugar de sun.swing.SwingUtilities2.BASICMENUITEMUI_MAX_TEXT_OFFSET, siempre que se utilizara de forma coherente en el código ofensivo. De ninguna manera una solución ideal.

Por el lado bueno, las malas importaciones de paquetes de protección solar se han incluido en las verificaciones de la regla de codificación.

Cuestiones relacionadas