java - programacion - private jlabel
JLabel con HTML no establece el ancho correctamente (3)
Estoy intentando establecer el ancho de un JLabel usando una etiqueta div HTML.
Considera el siguiente código:
import javax.swing.*;
public class Xyzzy extends JFrame{
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
Xyzzy frame = new Xyzzy();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));
String s = "x ";
for (int i=0; i<200; ++i)
s += "x ";
JLabel jl = new JLabel("<html><div style=/"width: 300px;/">" + s + "</div></html>");
frame.add(jl);
frame.setSize(600, 600);
frame.setVisible(true);
}
});
}
}
Hubiera esperado que el JLabel tuviera 300 píxeles de ancho, pero en realidad tiene unos 390 píxeles de ancho. Si cambio la especificación de ancho a 200px, la etiqueta resultante tendrá unos 260 píxeles de ancho.
¿Qué estoy haciendo mal?
Está configurando el ancho del texto en HTML, no el ancho de JLabel
.
Use el método setPreferredSize
para establecer el ancho de JLabel
.
frame.pack();
Dimension d = label.getSize();
d.width = width;
label.setPreferredSize(d);
Aunque es mejor dejar que el tamaño de JLabel
permita que el texto encaje, como has visto.
Este código html es demasiado complicado para JLabel (admite solo una parte de la especificación HTML) http://www.apl.jhu.edu/~hall/java/Swing-Tutorial/Swing-Tutorial-JLabel.html
El tamaño de los componentes depende del diseño. Prefiero MigLayout http://www.miglayout.com simple tutorial
Editar: HTML en JLabel está muy desactualizado
Gilbert, agrego tu código y termino con esto:
import javax.swing.*;
import java.awt.*;
public class Xyzzy extends JFrame{
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
Xyzzy frame = new Xyzzy();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.PAGE_AXIS));
String s = "x ";
for (int i=0; i<200; ++i)
s += "x ";
JLabel jl = new JLabel("<html>" + s + "</html>");
frame.add(jl);
frame.pack();
Dimension d = jl.getSize();
d.width = 200;
jl.setPreferredSize(d);
frame.setSize(600, 600);
frame.setVisible(true);
}
});
}
}
Esto simplemente no funciona. También intenté eliminar las etiquetas HTML y frame.setSize (600,600), ninguno de los cuales produce lo que estoy buscando: una JLabel que tiene 200 píxeles de ancho y ha ajustado su altura.