代码之家  ›  专栏  ›  技术社区  ›  BackSlash

在JLabel中以不同方式对齐文本和图标

  •  5
  • BackSlash  · 技术社区  · 13 年前

    我试图创建一个文本向左对齐、图标向右对齐的JLabel,我尝试了以下代码:

    _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);
    

    这就是我得到的:

    Alignment preview

    红色的图像显示实际的图像对齐,灰色的图像显示我想要的图像所在的位置。

    如果我加上

    _ip.setAlignmentX(JLabel.RIGHT_ALIGNMENT);
    

    什么都没发生,如果我加上

    _ip.setHorizontalAlignment(JLabel.RIGHT);
    

    图标向右对齐,但文本也向右对齐,我希望它向左对齐

    有办法做到这一点吗?

    2 回复  |  直到 13 年前
        1
  •  7
  •   BackSlash    9 年前

    或者,您可以使用 JPanel 具有合适的布局,如图所示 here .

    image

        2
  •  6
  •   mKorbel Mohammed Aslam    13 年前

    请戴姆???

    enter image description here

    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();
                }
            });
        }
    }
    

    编辑

    enter image description here

    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();
                }
            });
        }
    }