Necesito mostrar un JLabel texto en este formato.

Hoffenheim  1 : 0  Koeln
    Bayern  2 : 1  HSV

Yo simplemente no puede obtener este hecho. He intentado String.format() sin suerte.
Algún consejo?

  • Parece un JTable sería un mejor componente para mostrar este (tabular) de la información.
InformationsquelleAutor user1533166 | 2012-07-17

3 Comentarios

  1. 6

    Puede utilizar HTML. Leer Cómo Usar HTML en los Componentes Swing para más detalles. Por ejemplo, usted podría construir una tabla similar a la siguiente:

    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
    
    public class StringDemo {
    
        public static void main(String arg[]){
    
            StringBuilder buff = new StringBuilder();
            buff.append("<html><table>");
            buff.append(String.format("<tr><td align='right'>%s</td><td>:</td><td>%s</td></tr>", "Hoffenheim  1", "0  Koeln"));
            buff.append(String.format("<tr><td align='right'>%s</td><td>:</td><td>%s</td></tr>", "Bayern  2", "1  HSV"));
            buff.append("</table></html>");
    
            JOptionPane.showMessageDialog(null, new JLabel(buff.toString()));
        }
    }
    • Gracias este lo hizo! Tuve problema en este código con JLabel alinear a la izquierda, pero me ordenó con etiqueta.setHorizontalAlignment(JLabel.CENTRO);
    • me alegra poder ayudar!
    • +1 el Uso de StringBuilder en lugar de StringBuffer.
    • gracias! corregidos.
  2. 3

    String.format() se utiliza para insertar contenido en un formato especial de la cadena, no para mostrar la cadena de forma diferente. JLabels y otros componentes Swing permiten HTML sin embargo, que puede obtener lo que usted necesita.

    new JLabel("<html><pre>         Hoffenheim  1 : 0  Koeln</pre></html>");
    new JLabel("<html><pre>             Bayern  2 : 1  HSV</pre></html>");

    Que dijo, esto se parece a lo que estás pidiendo es el centro de su texto alrededor de los dos puntos, no sólo tiene un número determinado de espacios de distancia de la orilla. Que va a ser un poco más difícil, pero todavía es posible. Para hacer esto, usted querrá romper todo en varias etiquetas y colocarlos en una rejilla (yo encontrar MigLayout a ser muy bueno para este tipo de cosas).

    Crear seis JLabels, a la izquierda, derecha, centro o alinear ellos, según proceda, y de la caída, a continuación, en una cuadrícula como:

    | Hoffenheim  1 | : | 0  Koeln |
    |     Bayern  2 | : | 1  HSV   |

    Obviamente, usted puede deshabilitar las fronteras y en la que no aparece para el usuario para ser otra cosa que un formato agradable poco de texto.

    • No los espacios se cortó automáticamente por el representador de HTML?
    • No lo creo así. Si los espacios se fueron recortados desde cualquier lugar en un pre elemento, sería un comportamiento incorrecto por lo que es renderizar.
    • Ellos no ser, pero yo no he probado un <pre> etiqueta en un JLabel, así que no estoy seguro. El uso de HTML para el contenido del centro de la forma OP buscando aunque es un poco pidiendo una lata de obras aunque. Yo estaría mucho más inclinado a hacer esto a pesar de que el gestor de diseño – que es la forma «correcta» de hacerlo.
    • Lo siento, a su derecha, perdió el <pre> etiqueta, mi mal
  3. 2

    Que se extienden a partir de dimo414 respuesta que en realidad podría utilizar una tabla HTML

    StringBuilder sb = new StringBuilder(128);
    
    sb.append("<html>");
    sb.append("<table border='0'>");
    sb.append("<tr>");
    sb.append("<td align='right'>Hoffenheim</td>");
    sb.append("<td align='center'>1</td>");
    sb.append("<td align='center'>:</td>");
    sb.append("<td align='center'>0</td>");
    sb.append("<td align='left'>Koeln</td>");
    sb.append("</tr>");
    sb.append("<tr>");
    sb.append("<td align='right'>Bayern</td>");
    sb.append("<td align='center'>2</td>");
    sb.append("<td align='center'>:</td>");
    sb.append("<td align='center'>1</td>");
    sb.append("<td align='left'>HSV</td>");
    sb.append("</tr>");
    sb.append("</table>");
    sb.append("</html>");
    
    label.setText(sb.toString());

    Mientras que esto es mucho más complicado, se le da una mayor flexibilidad sobre el formato.

Dejar respuesta

Please enter your comment!
Please enter your name here