2009-05-21 12 views
6

Digamos que tengo un componente Swing estándar como JSlider, pero quiero ajustar ligeramente el mapa de entrada. Los mapas de entrada predeterminados y el mapa de acción se instalan por apariencia, y quiero reutilizar algunas de las acciones ya disponibles en ActionMap. Para hacer eso, necesito poner la clave de entrada de ActionMap en el valor de la entrada de un InputMap.¿Están estandarizados los nombres de las acciones predeterminadas en el mapa de acción del componente Swing?

Puedo buscar fácilmente las claves de ActionMap (siempre un String) en tiempo de ejecución con el depurador, y volver a utilizarlo. Funcionará - garantizó en mi versión de JDK y L & F.

Entonces la pregunta es, son las claves para las acciones de los componentes de Swing por defecto documentados en cualquier lugar, puede que "legalmente" cambio en el tiempo (es decir, desde la versión JDK a la versión de JDK o de L & F a L & F) y tienen ¿Has visto un cambio así en la práctica?

Gracias.

+1

He estado buscando la respuesta a esta pregunta. ¡Más difícil de lo que parece! +1 porque no puedo dar más –

Respuesta

4

Ok, me tomó un tiempo buscar esto.

En resumen, no parecen estar estandarizados (mucho) y no parecen estar documentados (mucho).

La clase LookAndFeel es la clave.Esta es la jerarquía:

  • LookAndFeel

  • BasicLookAndFeel

    • MetalLookAndFeel
    • MotifLookAndFeel
    • WindowsLookAndFeel
  • MultiLookAndFeel

En la clase BasicLookAndFeel, puede encontrar las asignaciones predeterminadas para acciones y enlaces de teclas, que heredarían todas las demás clases. Por lo tanto, podría considerar que esta clase es estándar. Puedes ver eso en la creación del objeto "por defecto", alrededor de 498 para Java 1.4.2_17.

Se pueden encontrar enlaces y sobreescrituras adicionales en los implementadores, como WindowsLookAndFeel.

Algunos de los nombres estandarizados se pueden encontrar en la clase DefaultEditorKit como campos estáticos. Esos parecen ser seguros de usar y reasignar. Su uso se puede ver en las clases WindowsLookAndFeel y MotifLookAndFeel. Me sentiría seguro suponiendo que esas acciones se mantendrán constantes.

En resumen, es poco probable que las acciones definidas en DefaultEditorKit cambien. Sin embargo, las asociaciones de teclas cambian completamente entre implementaciones L & F. Recupere la acción del mapa utilizando DefaultEditorKit.something y debería funcionar en todas las versiones. Ejemplo de DefaultEditorAction que posiblemente podría usar con JSlider:

/** 
* Name of the Action for extending the selection 
* by moving the caret logically forward one position. 
* @see #getActions 
*/ 
public static final String selectionForwardAction = "selection-forward"; 
3

ActionMapInputMap y tienen getParent() y setParent(), por lo que la solución es:

  1. Crear un nuevo mapa con los pocos cambios que desea realizar.
  2. consultar sus componentes por su mapa
  3. Conjunto ese mapa como padre de su nuevo mapa
  4. instalar su nuevo mapa en el componente

De esta manera sus modificaciones sobreescriben y se extienden las asignaciones existentes.

[EDITAR] No estoy al tanto de que haya una lista de todas las claves en cualquier lugar. Pero cosas como maxScroll deben ser "estables", es decir, deberían existir en versiones futuras (no es que Swing haya cambiado mucho en los últimos 10 años ...)

Por lo tanto, si necesita reemplazar un determinado mapeo, utilice el método encima. De esta forma, conserva todas las asignaciones existentes de L & F (manteniendo el componente utilizable incluso si comete un error). Si depende de sobrescribir una determinada clave, entonces sugiero que compruebe si la clave existe y arrojar un error si desapareciera repentinamente.

De esta manera, su código funcionará (probablemente por muchos años) y si se rompe, le informará activamente sobre el cambio.

+0

esto no es lo que pregunto sobre – sereda

+0

Lo mismo funciona con el InputMap, entonces me pregunto por qué no se puede simplemente extender los mapas existentes? ¿Por qué quieres copiar todas las claves a los nuevos mapas? –

+0

No tengo problemas para extender los mapas de entrada y acción, y no quiero copiar todas las claves. Lo siento si esto no está claro en la redacción de mi pregunta. Mi pregunta es si las claves para las acciones utilizadas en esos mapas están documentadas en cualquier lugar (en otras palabras, qué tan confiable es el código que asume que hay una clave, por ejemplo, "maxScroll" para la acción que mueve el control deslizante hasta el final de la escala) – sereda

Cuestiones relacionadas