et es "etiqueta" (label)
Son nomenclaturas mías que suelo usar. Cada uno usa las que le parece mejor, no hay ninguna "norma" o costumbre común respecto a esto.
Usar nomenclaturas es muy cómodo. Cuando por ejemplo llega el momento de escribir el código para que funcione el botón de borrar, me preguntaré ¿qué nombre le puse?
Pues en lugar de tener que desplazarme por el código buscando la línea donde lo declaré, puedo adivinar que probablemente lo habré llamado
btBorrar ya que es mi costumbre habitual, así que no tengo que buscarlo.
Lo que mencionas sobre el tamaño de fuente, lo de decidir el tamaño según las características del ordenador donde se está ejecutando, es algo que yo mismo he pensado muchas veces pero no lo he investigado.
Sí se puede hacer, desde luego, pero...¿cómo decidir cuál es la fuente adecuada para cada caso?
No se si habrá un consenso sobre esto, sería interesante que algún profesional que se dedique a la programación de verdad nos comentara sobre este asunto.
Yo tengo un monitor de alta resolución, 2560x1440 px, y diría que NO ES COSTUMBRE adaptar el tamaño de fuentes, porque yo todos los programas que uso en mi día a día: navegadores web, Steam, Eclipse, Libre Office, Filmora...,, sea el que sea, me encuentro con que las fuentes son demasiado pequeñas para la resolución de mi pantalla.
Puedo configurar Windows para que automáticamente amplíe las fuentes un determinado porcentaje, pero no siempre consigue unos tamaños acertados.
Así que por lo general uso las opciones de configuración de cada programa (si las tiene) para ampliar fuentes, o bien acepto tener que dejarme la vista
Pero NINGÚN programa hace una adaptación de fuentes apropiada a mi pantalla. Así que parece que no suele hacerse en el mundo profesional.
Supongo que no es fácil, ya que cada dispositivo es un mundo. Hay pantallas de móvil con la misma resolución que la de mi monitor, pero obviamente los tamaños de pantalla (mi monitor es 27") son muy distintos.
Así que los programas, si quisieran determinar una fuente de texto adecuada, tendrían que valorar la resolución en pixeles, el tamaño en pulgadas, la relación de aspecto (16:9, 4:3, 16:10,....), la orientación (vertical, apaisada..),....
Son demasiadas variables a tener en cuenta, demasiado difícil acertar..., y luego al final seguramente tendrá más peso las dioptrías
de cada persona que todo lo antes mencionado.
Así que mejor dejar una fuente única, y en todo caso, dar opciones para que el propio usuario elija un tamaño de fuente a su gusto.
Por otro lado, la fuente que puse para este programa es exageradamente grande.
Al tratarse de un formulario con tan pocos elementos, pero que ocupa toda la pantalla (y mi pantalla es muy grande), puse una fuente gigante que parece más un título que no un texto.
Sobre la cantidad de paneles, es para conseguir que los elementos queden lo mejor maquetados posibles.
Los elementos Swing, no siempre ocupan los espacios dentro de un panel de manera que queden centrados y/o repartidos de forma simétrica.
Combinando paneles y con los layout adecuados, se puede llegar a conseguir.
Por ejemplo, vamos a suponer que quiero dos botones que queden repartidos y centrados simétricamente en un formulario.
Si los añado en el contenedor base, con un FlowLayout
public class Prueba extends JFrame {
private JButton btUno;
private JButton btDos;
public Prueba() {
btUno = new JButton("Botón 1");
btDos = new JButton("Botón 2");
setLayout(new FlowLayout());
add(btUno);
add(btDos);
setTitle("Prueba");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 300);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Prueba();
}
}
No queda como yo quiero, están ahí rejuntado en el centro, con un montón de panel vacío alrededor.
Además, están pegados arriba, no están centrados verticalmente.
¿Y si pruebo con un BoxLayout que ponga los elementos en el eje X(horizontal)?
public class Prueba extends JFrame {
private JButton btUno;
private JButton btDos;
public Prueba() {
btUno = new JButton("Botón 1");
btDos = new JButton("Botón 2");
setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
add(btUno);
add(btDos);
setTitle("Prueba");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 300);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Prueba();
}
}
Vaya, ahora están centrados en la vertical, pero no la horizontal. Y siguen pegados el uno al otro...
¿Probamos a darle paneles propios a cada botón?
public class Prueba extends JFrame {
private JButton btUno;
private JButton btDos;
public Prueba() {
btUno = new JButton("Botón 1");
btDos = new JButton("Botón 2");
setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
JPanel pnUno = new JPanel();
pnUno.add(btUno);
JPanel pnDos = new JPanel();
pnDos.add(btDos);
add(pnUno);
add(pnDos);
setTitle("Prueba");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 300);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Prueba();
}
}
Humm. se parece un poco más a lo que busco. El espacio horizontal está bien repartido.
Pero no el vertical, están pegados arriba, yo los quisiera en el centro.
A ver.., vamos a recurrir a la clase
Box, la cuál nos permite crear una "caja" y añadir elementos "invisibles" para que ocupen espacios y así situar nuestro elemento "visible".
Haremos dos "cajas", con dos objetos invisibles verticales y entre ellos, nuestro panel con botón.
public class Prueba extends JFrame {
private JButton btUno;
private JButton btDos;
public Prueba() {
btUno = new JButton("Botón 1");
btDos = new JButton("Botón 2");
setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
JPanel pnUno = new JPanel();
pnUno.add(btUno);
Box cajaVertical1 = Box.createVerticalBox();
cajaVertical1.add(Box.createVerticalGlue());
cajaVertical1.add(pnUno);
cajaVertical1.add(Box.createVerticalGlue());
JPanel pnDos = new JPanel();
pnDos.add(btDos);
Box cajaVertical2 = Box.createVerticalBox();
cajaVertical2.add(Box.createVerticalGlue());
cajaVertical2.add(pnDos);
cajaVertical2.add(Box.createVerticalGlue());
add(cajaVertical1);
add(cajaVertical2);
setTitle("Prueba");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500, 300);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Prueba();
}
}
Ahora sí, esto sería lo que busco.
Parece que por abajo hay más espacio que por arriba, pero yo lo daría por bueno.
Como ves, si nos ponemos caprichosos con las posiciones que queremos que ocupen los elementos, incluso para una interfaz simplona compuesta de solo dos botones, pues es muy posible que necesitemos "envolver" algunos elementos en su propio JPanel y así además poder combinar distintos layouts.
Hay un layout que nos permite evitar tener que usar tanto JPanel para situar los componentes a nuestros gusto. Es el
GridBagLayout, tan útil y sofisticado... como complejo y enfarragoso de utilizar.
Si tienes curiosidad busca tutoriales por Google, cualquiera que encuentres seguro que sabe explicarlo mejor que yo
Un saludo.