java 在 JLabel 中以不同方式对齐文本和图标
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/15731246/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Align text and icon differently in JLabel
提问by BackSlash
i'm trying to create a JLabel that has text aligned left and icon aligned right, i tried this code:
我正在尝试创建一个文本左对齐和图标右对齐的 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);
And this is what i get:
这就是我得到的:
The red image shows the actual image alignment, the gray one shows where i want my image to be.
红色图像显示了实际的图像对齐方式,灰色图像显示了我想要图像的位置。
If i add
如果我添加
_ip.setAlignmentX(JLabel.RIGHT_ALIGNMENT);
Nothing happens, and if i add
什么都没有发生,如果我添加
_ip.setHorizontalAlignment(JLabel.RIGHT);
Icon is aligned right, but also text is aligned right, and i want it to align left
图标右对齐,但文本也右对齐,我希望它左对齐
Is there a way to do it?
有没有办法做到这一点?
回答by trashgod
回答by mKorbel
please DYM???
请戴姆???
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();
}
});
}
}
EDIT
编辑
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();
}
});
}
}