tutorial programacion example ejemplo create java html swing resize jlabel

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.



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.