Ответ 1
label.setVerticalTextPosition(JLabel.BOTTOM);
label.setHorizontalTextPosition(JLabel.CENTER);
Вам нужно центрировать выравнивание по горизонтальной оси, чтобы текст отображался под значком.
Я пытаюсь, чтобы значок JLabel
отображался над текстом метки.
В настоящее время у меня есть следующий код:
URL loc = null;
ImageIcon img = null;
JLabel label = null;
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));
loc = Test.class.getResource("/Images/imageName.jpg");
img = new ImageIcon(loc);
label = new JLabel("someText", img, JLabel.CENTER);
label.setIconTextGap(0);
label.setVerticalTextPosition(JLabel.BOTTOM);
label.setHorizontalTextPosition(JLabel.RIGHT);
frame.getContentPane().add(label);
Вывод, который я сейчас вижу, - это текст ярлыка справа от значка изображения. Может ли кто-нибудь предложить, что изменить?
label.setVerticalTextPosition(JLabel.BOTTOM);
label.setHorizontalTextPosition(JLabel.CENTER);
Вам нужно центрировать выравнивание по горизонтальной оси, чтобы текст отображался под значком.
import java.awt.image.BufferedImage;
import javax.swing.*;
public class TopLabel {
public static void main(String[] args) throws Exception {
Runnable r = new Runnable() {
@Override
public void run() {
JLabel label = new JLabel("Text");
BufferedImage image = new BufferedImage(
32,32,BufferedImage.TYPE_INT_RGB);
label.setIcon(new ImageIcon(image));
label.setVerticalTextPosition(SwingConstants.BOTTOM);
label.setHorizontalTextPosition(SwingConstants.CENTER);
JOptionPane.showMessageDialog(null, label);
}
};
// Swing GUIs should be created and updated on the EDT
// http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
SwingUtilities.invokeLater(r);
}
}
IIUC, и вы хотите показать текст внутри (в середине) изображения/значка, после чего у вас есть
возможность использовать Graphics.drawString()
, чтобы нарисовать текст внутри изображения.
BufferedImage bimg = ImageIO.read(url);
Graphics2D g = (Graphics2d)img.getGraphics();
g.drawString("Text", x, y); //y > 0
g.dispose();
JLabel label = new JLabel();
label.setIcon(new ImageIcon(bimg));