JLabel文字位置

时间:2016-03-28 21:30:33

标签: java swing jlabel

我是JLabel的新用户,我想知道是否可以在图像上以特定的(x,y)坐标设置文本。

喜欢这样:

enter image description here

所以文字是“HI”

 label.setText("HI");
 label.setIcon(icon);

我试图说label包含图片和文字,但我想将其定位在特定位置,如上图所示。

我不想使用label.setHorizontalTextPosition(i);setVerticalTextPosition(i);

抱歉我的英语不好 在此先感谢^ ^

3 个答案:

答案 0 :(得分:3)

有许多合理的方法可以做到这一点。

但是,你应该避免使用OddField布局,像素完美布局是现代ui设计中的错觉。影响组件个体大小的因素太多,您无法控制。 Swing旨在与布局管理器一起工作,放弃这些将导致问题和问题的终结,您将花费越来越多的时间来纠正

nullGridBagLayout

Example

GridBagConstraints#insets

import java.awt.EventQueue; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; public class Test { public static void main(String[] args) { new Test(); } public Test() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { ex.printStackTrace(); } JFrame frame = new JFrame("Testing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new TestPane()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } catch (IOException ex) { ex.printStackTrace(); } } }); } public class TestPane extends JPanel { public TestPane() throws IOException { setLayout(new GridBagLayout()); BufferedImage img = ImageIO.read(...); JLabel background = new JLabel(new ImageIcon(img)); background.setLayout(new GridBagLayout()); GridBagConstraints gbc = new GridBagConstraints(); gbc.insets = new Insets(1, 46, 9, 0); gbc.anchor = GridBagConstraints.SOUTH; gbc.weighty = 1; JLabel message = new JLabel("Go that way!"); message.setVerticalAlignment(JLabel.BOTTOM); background.add(message, gbc); add(background); } } }

您可以将文本直接绘制到图像上,但正如您所看到的,它变得相当复杂

Image

Graphics2D

答案 1 :(得分:2)

通过覆盖paintComponent方法,可以在任何位置绘制文本。

JLabel label = new JLabel(icon) {
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawString("Hi", 10, 10); //these are x and y positions
    }
};

答案 2 :(得分:0)

您可以按照Example进行操作,同时查看Components的{​​{1}}方法JLabel,同时尝试使用Layouts更好地管理Component每个JLabel的位置。

setLocation()也适用于JLabel label = new JLabel("Hi"); panel.add(label); //This is to get the width and height Dimension size = label.getPreferredSize(); //You can change 100(x) and 100(y) for your likes, so you can put that JLabel wherever you want label.setBounds(100, 100, size.width, size.height); 的位置,您可以看到他如何完成工作并将其应用到您的项目中。

实施例

x

您必须知道y以及JLabel想要放置x的内容。

如果您想这样做,只需执行guy所做的事情,但要显示yContainer以了解您想要的确切位置。

创建Container container= getContentPane();

JLabel

在其上添加container.add(label);

MouseListener()

添加x以获取ycontainer.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent e){ //x and y are ints. x = e.getX(); y = e.getY(); label.setBounds(x,y,150,50); } });

FOR v IN vertex_collection  
    FILTER LENGTH( EDGES(edge_collection, v._id, "outbound"))==0
RETURN v._id