estoy tratando de crear un JLabel que tiene el texto alineado a la izquierda y el icono alineado a la derecha, he probado este código:

_ip = new JLabel(ip);
_ip.setFont(boldFont);
_ip.setBounds(5, 0, 100, 50);
_ip.setIcon(images.ipBan);
_ip.setBorder(BorderFactory.createLineBorder(Color.black, 1));
_ip.setHorizontalTextPosition(SwingConstants.LEFT);
add(_ip);

Y esto es lo que obtengo:

Alinear el texto y el icono de forma diferente en JLabel

El rojo de la imagen se muestra la imagen real de la alineación, el gris de una muestra donde yo quiero que mi imagen sea.

Si puedo añadir

_ip.setAlignmentX(JLabel.RIGHT_ALIGNMENT);

No pasa nada, y si puedo añadir

_ip.setHorizontalAlignment(JLabel.RIGHT);

Icono está alineado a la derecha, pero también el texto está alineado a la derecha, y quiero que se alinee a la izquierda

Hay una manera de hacerlo?

  • No añadir un par de espacios resuelve el problema?Me refiero a jLabel.setText("99.222.22.230 (FEW SPACES) ")
  • No, esto va a ser un exagerado-de-db IPs lista, si quiero añadir algunos espacios que significa que debo saber que cada IP estoy de carga, pero en realidad yo no se como se cargan desde una db, de manera que no puedo agregar espacios
  • Sé que es una forma fea, pero su ip cadena+ » (ESPACIO)» va a hacer el trabajo.
  • Debe haber una manera (complicada o no) para hacer eso, los espacios son sólo una solución temporal que no quiero utilizar, principalmente porque la fuente que estoy usando no es solo espacio, así que si puedo poner algunas etiquetas en un JList, todos los iconos estarán alineados a los demás
InformationsquelleAutor BackSlash | 2013-03-31

2 Comentarios

  1. 6

    Alternativamente, puede utilizar un JPanel con un diseño adecuado, como se muestra aquí.

    Alinear el texto y el icono de forma diferente en JLabel

    • Que fue maravillosa EG +1, yo estaba a punto de publicar un como, por ejemplo, de la suma de la longitud de la cadena cosas lol
    • Esto es lo que yo estaba buscando, gracias!
    • Usted es bienvenido! @joeyrohan: Podría ser posible con TextLayout en una costumbre LabelUI, para ejemplo.
    • +1, para permitir que un administrador de diseño para el trabajo.
    • Muy bien hecho, tanto los Ejemplos!aprender elemento de la jornada!
    • +1 ………………

  2. 5

    por favor DYM???

    Alinear el texto y el icono de forma diferente en JLabel

    import java.awt.*;
    import javax.swing.*;
    
    public class CenteredJLabel {
    
        private JFrame frame = new JFrame("Test");
        private JPanel panel = new JPanel();
        private JLabel label = new JLabel("CenteredJLabel");
        private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
    
        public CenteredJLabel() {
            panel.setLayout(new GridBagLayout());
            panel.add(label);
            label.setHorizontalAlignment(SwingConstants.LEFT);
            label.setVerticalAlignment(SwingConstants.CENTER);
            label.setIcon(errorIcon);
            label.setIconTextGap(20);
            label.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
            panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
            frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            frame.add(panel);
            frame.pack();
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        }
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    CenteredJLabel centeredJLabel = new CenteredJLabel();
                }
            });
        }
    }

    EDITAR

    Alinear el texto y el icono de forma diferente en JLabel

    import java.awt.*;
    import javax.swing.*;
    public class CenteredJLabel {
    private JFrame frame = new JFrame("Test");
    private JPanel panel = new JPanel();
    private JLabel labelOne = new JLabel("CenteredJLabel");
    private JLabel labelTwo = new JLabel("1.1.1.1");
    private JLabel labelThree = new JLabel("192.168.255.255");
    private JLabel labelFour = new JLabel("192.168.255.255");
    private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
    private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon");
    private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon");
    private Icon questnIcon = UIManager.getIcon("OptionPane.questionIcon");
    private JPanel panelTwo = new JPanel();
    public CenteredJLabel() {
    panel.setLayout(new GridLayout(4, 0, 10, 10));
    labelOne.setHorizontalAlignment(SwingConstants.LEFT);
    labelOne.setVerticalAlignment(SwingConstants.CENTER);
    labelOne.setIcon(errorIcon);
    labelOne.setIconTextGap(20);
    labelOne.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
    panel.add(labelOne);
    labelTwo.setHorizontalAlignment(SwingConstants.LEFT);
    labelTwo.setVerticalAlignment(SwingConstants.CENTER);
    labelTwo.setIcon(infoIcon);
    labelTwo.setIconTextGap(20);
    labelTwo.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
    panel.add(labelTwo);
    labelThree.setHorizontalAlignment(SwingConstants.LEFT);
    labelThree.setVerticalAlignment(SwingConstants.CENTER);
    labelThree.setIcon(warnIcon);
    labelThree.setIconTextGap(20);
    labelThree.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
    panel.add(labelThree);
    panelTwo.setLayout(new BorderLayout());
    panelTwo.setOpaque(false);
    panelTwo.add(labelFour, BorderLayout.WEST);
    panelTwo.add(new JLabel(questnIcon), BorderLayout.EAST);
    panel.add(panelTwo);
    panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    frame.add(panel);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }
    public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
    @Override
    public void run() {
    CenteredJLabel centeredJLabel = new CenteredJLabel();
    }
    });
    }
    }
    • No funciona. Si se quita la frame.pack() instrucción y simplemente hacer frame.setSize(500,300), sólo el centro de la etiqueta, que no es lo que quiero hacer
    • No creo que él está tratando de mostrar la imagen en el centro, pero ver el espacio entre el icono y el texto.
    • No estoy diciendo que nos muestra la imagen en el centro, estoy diciendo que esta solución simplemente centra el texto y el icono en la JLabel, pero esto no es lo que necesito, así que esto no es una solución a mi problema, y también el espacio entre el texto y el icono no es una solución, porque no sé cómo muchos chars mi texto se contienen
    • Pero siempre se puede saber el max : xxx.xxx.xxx.xxx .Qué es exactamente lo que quieres?Puede ser Label.setIconTextGap() ayuda?
    • Utilizando el icono de texto brecha es la misma como el uso de los espacios, si puedo usar, es decir _ip.setIconTextGap(15), a continuación, una etiqueta con el texto 151.33.58.1 tendrá el texto y el icono de aligment que quiero, pero si mi texto es 1.1.1.1 no se alineen correctamente.
    • todo depende del tamaño de la etiqueta.SOk aquí un truco (no sé una manera simple) establecer el icono de la brecha como por la longitud de su cadena ..debo tratar?
    • el ejemplo anterior es perfecto, que se alinee correctamente.Trate de las entradas.+1 para la respuesta.
    • de verdad? Comprobar mi primer comentario, sólo manualmente el tamaño de la trama y verás que esto no es lo que necesito. A continuación, intente cambiar la longitud del texto, y usted verá que el icono de la posición estará basada en la longitud del texto
    • entonces tienes que añadir LayoutManager(Caja o BorderLayout) a JLabel y poner allí un JLabel con el texto y otro JLabel con el Ícono, véase mi edición aquí
    • el problema sigue siendo el mismo, el icono «i» no está alineado con todos los otros iconos
    • por favor, ¿cómo entender que yo acostada JPanel con dos JLabels, a continuación, en todos los casos el texto de partida en el lado izquierdo y el Icono que está pegada en el lado derecho, sobre los conceptos básicos de diseño ….
    • activo JComponent para poner el Icono de la JButton sin decorar
    • Sí, lo entiendo, pero no lo que yo quiero, trashgod respuesta es lo que estoy buscando.
    • 1.san momento estuve de acuerdo, seguro acerca de la aceptación de la respuesta 🙂 ….

Dejar respuesta

Please enter your comment!
Please enter your name here