He visto esto subir algunas veces, pero en las publicaciones que he visto, nadie me lo explicó. ¿Por qué no debería extender JFrame (o cualquier componente)? ¿Hay condiciones en las que debería extender un componente, o es esta una regla firme que usted no?¿Por qué no debería extender JFrame y otros componentes?
Respuesta
En términos generales, extender el componente tiende a hacerse estrictamente para utilizar el componente. Esto limita severamente sus opciones de forma innecesaria en términos de diseño, de modo que sus clases no pueden extender diferentes clases, no puede ocultar los métodos de JFrame, lo que hace que sea más difícil de mantener y más fácil de desencadenar errores inesperados al usar la clase .
Normalmente, la intención es utilizar estrictamente la clase para dibujar un marco, y se prefiere la composición sobre la herencia.
Dicho esto, las subclases deberían estar bien cuando pretenda que su subclase agregue funcionalidad específica del proyecto al Marco (como métodos de conveniencia y similares) donde se usaría la subclase en lugar del Marco en sí, pero se usaría como un marco en general, no como una vista de un marco específico en la aplicación.
Si su aplicación REALMENTE es solo un JFrame, prosiga y amplíelo. Sin embargo, es mejor usar composición de objetos en lugar de herencia si simplemente es usando un JFrame.
Si su objeto se extiende a algún otro objeto no tendría otra opción en el asunto, como un ejemplo.
No veo el problema mientras amplíe la clase y pueda conservar los aspectos "is-a" de la herencia.
Cuando extiende un JPanel pero su nuevo objeto no es una verdadera especialización de JPanel, es allí donde tiene problemas. Pero si creas un nuevo SpeciallyFormattedJLabel
que se extiende a JLabel
, no veo ningún problema con eso.
Prefiere la composición sobre la herencia. Todas las razones usuales. La composición fuerza menos dependencias entre el código.
Swing, y evento AWT, los componentes son horriblemente complicados. No quieres meterme en ese lío. Puede anular los métodos accidentalmente. En los casos en los que es necesario anular los métodos, es difícil ver dónde se hace eso si se trata de un código normal.
isValid es un clásico para anular accidentalmente – willcodejavaforfood
Sé que esta es una publicación anterior, pero me encontré con ella y tengo que decírtelo ... extendiendo mis opciones limitadas de llamar a ciertas acciones del objeto. En realidad estoy reescribiendo algunas partes del código ahora para deshacerme del daño que me ha causado extender. A menos que esté escribiendo un programa de un solo archivo, no voy a usar extended nuevamente.
- 1. Extender un JFrame
- 2. ¿Por qué JFrame originalmente requieren getContentPane() para agregar componentes
- 3. ¿Debería subclasificar JFrame/JPanel o no?
- 4. HTML ya no funciona en JLabel (y otros componentes)
- 5. actualizar JFrame después de agregar nuevos componentes
- 6. ¿Cómo agregar múltiples componentes a un JFrame?
- 7. ¿Por qué debería/no debería usar el operador "nuevo" para instanciar una clase, y por qué?
- 8. ¿Por qué no debería usar Unity?
- 9. ¿Por qué no debería llamar a setVisible (verdadero) antes de agregar componentes?
- 10. ¿Por qué algunos incluyen necesitan el .h y otros no?
- 11. ¿Por qué Swing JFrame siempre es accesible?
- 12. ¿Por qué debería usar JMS y no RMI + Queue?
- 13. ¿Por qué no debería implementar Equals y GetHashCode usando reflection?
- 14. Python: ¿Por qué debería usar next() y no obj.next()?
- 15. ¿Por qué no debería usar UNIVERSAL :: isa?
- 16. include() ¿Por qué no debería usarlo?
- 17. ¿Por qué no debería usar AutoDual?
- 18. ¿Por qué debería usar MXML?
- 19. ¿Qué componentes del framework .Net debería evitar un desarrollador profesional?
- 20. ¿Cuándo y por qué debería usar TStringBuilder?
- 21. ¿Por qué debería aprender y usar puntales?
- 22. ¿Por qué debería aprender C++
- 23. ¿Por qué no hay una clase java.lang.Array? Si una matriz de Java es un Objeto, ¿no debería extender Objeto?
- 24. ¿Cómo eliminar todos los componentes de un JFrame en Java?
- 25. ¿Por qué no puedo extender bool en Python?
- 26. ¿Por qué no es posible extender anotaciones en Java?
- 27. JPanel tamaño por componentes internos
- 28. ¿Por qué extender la clase de excepción?
- 29. ¿Por qué mxml no admite constructores de componentes?
- 30. ¿Por qué debería (o no debería) escribir mi nuevo sitio web en HTML 5 y CSS3?
De acuerdo. Esto es swing, tienes que extender los componentes para obtener el comportamiento de la pintura. – akarnokd
@ kd304 * "para obtener el comportamiento de la pintura." * Podemos hacer 'comportamiento de la pintura' en una 'Imagen Buffered' .. –