Thread View: es.comp.lenguajes.java
5 messages
5 total messages
Started by leonardoazpurua
Sun, 08 Apr 2007 00:57
Cuando calificar los nombres y cuando no...
Author: leonardoazpurua
Date: Sun, 08 Apr 2007 00:57
Date: Sun, 08 Apr 2007 00:57
63 lines
2682 bytes
2682 bytes
Hola.
Tome un ejemplo, creo que de los que vienen con NetBeans, para jugar
un poco con el.
Es la aplicacion ContactEditorUI.
Lo primero que noto es que el IDE (NetBeans) inserta toneladas de
codigo innecesario. Por ejemplo:
buttonGroup1.add(jRadioButton1);
jRadioButton1.setText("HTML");
jRadioButton1.setBorder(BorderFactory.createEmptyBorder(0, 0,
0, 0));
jRadioButton1.setMargin(new java.awt.Insets(0, 0, 0, 0));
las dos ultimas lineas puedes comentarlas o dejarlas, y da lo mismo
(imagino que hay una especie de estandarizacion del codigo generado
que hace cosas innecesarias si no se modifican las propiedades en
tiempo de disenho).
Pero el ejemplo no importa nada, y califica todos los nombres. Es
decir, en vez de hacer lo que haria uno codificando a mano:
import javax.swing.*;
y luego
private ButtonGroup buttonGroup1;
el IDE no genera ningun import, y en su lugar pone:
private javax.swing.ButtonGroup buttonGroup1;
imagino que es la clase de cosas que pone escamosos a los detractores
de los IDE.
Pero la pregunta no es esa.
Jugando con el ejemplo, mande a suprimir todas las "apariciones de
javax.swing."
El codigo no compilo, porque no reconocia
border.TitledBorder.DEFAULT_JUSTIFICATION
probe a agregar
import javax.swing.border;
escribiendo luego
TitledBorder.DEFAULT_JUSTIFICATION
pero tampoco anda. Solo he logrado que compile escribiendo el nombre
totalmente calificado.
Habra alguien que pueda explicarme como funciona eso?
Salud!
Leonardo
Re: Cuando calificar los nombres y cuando no...
Author: Ricardo Palomares Martinez
Date: Sun, 08 Apr 2007 17:10
Date: Sun, 08 Apr 2007 17:10
121 lines
4523 bytes
4523 bytes
leonardoazpurua@cantv.net escribió:
> Hola.
>
> Tome un ejemplo, creo que de los que vienen con NetBeans, para jugar
> un poco con el.
>
> Es la aplicacion ContactEditorUI.
>
> Lo primero que noto es que el IDE (NetBeans) inserta toneladas de
> codigo innecesario. Por ejemplo:
>
> buttonGroup1.add(jRadioButton1);
> jRadioButton1.setText("HTML");
> jRadioButton1.setBorder(BorderFactory.createEmptyBorder(0, 0,
> 0, 0));
> jRadioButton1.setMargin(new java.awt.Insets(0, 0, 0, 0));
>
> las dos ultimas lineas puedes comentarlas o dejarlas, y da lo mismo
> (imagino que hay una especie de estandarizacion del codigo generado
> que hace cosas innecesarias si no se modifican las propiedades en
> tiempo de disenho).
Creo que lo que hace NetBeans aquí es no suponer que el comportamiento
de Swing cuando no se especifica algo es el que tiene, porque si no
está documentado, puede cambiar de una versión a otra sin previo
aviso. Por eso define los bordes y márgenes, aunque al no haberle dado
tú valores explícitos, son bordes y márgenes vacíos. :-)
Por cierto, que se supone que no debes tocar el código protegido por
el editor. Es la manera más rápida de que no puedas abrir el
formulario en el editor GUI. :-)
>
> Pero el ejemplo no importa nada, y califica todos los nombres. Es
> decir, en vez de hacer lo que haria uno codificando a mano:
>
> import javax.swing.*;
>
> y luego
>
> private ButtonGroup buttonGroup1;
>
> el IDE no genera ningun import, y en su lugar pone:
>
> private javax.swing.ButtonGroup buttonGroup1;
>
> imagino que es la clase de cosas que pone escamosos a los detractores
> de los IDE.
Hay un motivo para eso, y también hay un bug creado para que el
comportamiento cambie. El motivo es que no hay nada que impida que tú
definas el paquete net.mipaquete.grafico con la clase ButtonGroup
dentro de él; si importas manualmente al principio del archivo ese
paquete y el editor GUI importara javax.swing para definir la variable
buttonGroup así:
private ButtonGroup buttonGroup1;
no sabría a cuál de las dos clases se refiere el código. Para evitar
este tipo de problemas, usa siempre el nombre calificado.
>
> Pero la pregunta no es esa.
>
> Jugando con el ejemplo, mande a suprimir todas las "apariciones de
> javax.swing."
>
> El codigo no compilo, porque no reconocia
>
> border.TitledBorder.DEFAULT_JUSTIFICATION
Normal, no creo que esto te extrañase. :-)
>
> probe a agregar
>
> import javax.swing.border;
>
> escribiendo luego
>
> TitledBorder.DEFAULT_JUSTIFICATION
>
> pero tampoco anda.
Porque se importan clases, no paquetes. Deberías haber escrito:
import javax.swing.border.TitledBorder;
y luego habrías podido usar la propiedad estática
DEFAULT_JUSTIFICATION de la clase TitledBorder, que no hace falta que
califiques porque ya has importado.
> Solo he logrado que compile escribiendo el nombre
> totalmente calificado.
>
> Habra alguien que pueda explicarme como funciona eso?
Aparte de lo que te he dicho, lo único que creo que podría causarte
algún tipo de confusión es si cuando haces:
importa javax.swing.*;
importas cosas como javax.swing.border.TitledBorder. Y la respuesta es
no, el asterisco importa todas las *clases* que cuelgan de
javax.swing, pero no las que cuelgan de javax.swing.<otro_paquete>.
Saludos.
--
If it's true that we are here to help others,
then what exactly are the OTHERS here for?
Re: Cuando calificar los nombres y cuando no...
Author: leonardoazpurua
Date: Sun, 08 Apr 2007 20:17
Date: Sun, 08 Apr 2007 20:17
15 lines
1731 bytes
1731 bytes
On 8 abr, 13:10, Ricardo Palomares Martinez <rpm.PU...@iespana.es> wrote: > Porque se importan clases, no paquetes. Deberías haber escrito: > > import javax.swing.border.TitledBorder; > Hola, Pero si importo <javax.swing.border> y luego escribo TitledBorder.algo, no deberia javac entender que TitledBorder se refiere al TitledBorder definido en javax.swing.border, y que algo deberia ser un miembro estatico de esa clase? Gracias!
Re: Cuando calificar los nombres y cuando no...
Author: Ricardo Palomares Martinez
Date: Mon, 09 Apr 2007 09:28
Date: Mon, 09 Apr 2007 09:28
29 lines
1891 bytes
1891 bytes
leonardoazpurua@cantv.net escribió: > On 8 abr, 13:10, Ricardo Palomares Martinez <rpm.PU...@iespana.es> > wrote: >> Porque se importan clases, no paquetes. Deberías haber escrito: >> >> import javax.swing.border.TitledBorder; >> > > Hola, > > Pero si importo <javax.swing.border> y luego escribo > TitledBorder.algo, no deberia javac entender que TitledBorder se > refiere al TitledBorder definido en javax.swing.border, y que algo > deberia ser un miembro estatico de esa clase? > No, porque como digo se importan clases, no paquetes. Cuando escribes: import javax.swing.*; no importas el paquete javax.swing, sino todas las clases que cuelgan directamente de javax.swing. Es más, ¿te compila correctamente si pones sólo el nombre del paquete sin ".*" al final? Porque a mí no. Saludos. -- If it's true that we are here to help others, then what exactly are the OTHERS here for?
Re: Cuando calificar los nombres y cuando no...
Author: leonardoazpurua
Date: Mon, 09 Apr 2007 11:08
Date: Mon, 09 Apr 2007 11:08
27 lines
2367 bytes
2367 bytes
On 9 abr, 05:28, Ricardo Palomares Martinez <rpm.PU...@iespana.es> wrote: > leonardoazpu...@cantv.net escribió: > > Pero si importo <javax.swing.border> y luego escribo > > TitledBorder.algo, no deberia javac entender que TitledBorder se > > refiere al TitledBorder definido en javax.swing.border, y que algo > > deberia ser un miembro estatico de esa clase? > > No, porque como digo se importan clases, no paquetes. Cuando escribes: > > import javax.swing.*; > > no importas el paquete javax.swing, sino todas las clases que cuelgan > directamente de javax.swing. Es más, ¿te compila correctamente si > pones sólo el nombre del paquete sin ".*" al final? Porque a mí no. No, no compila. Ya he modificado tanto el ejemplito que ni recuerdo lo que tenia originalmente. Pero era algo como que importaba javax.swing.border.* y a pesar de ello, debia calificar TitledBorder. De todas maneras, lo mas probable era que estuviera haciendo algo mal. Gracias.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads