在给定的示例中,我想将文本移动到图像和形状下方。请帮我做。
package test; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class TestLabel extends JPanel { private Integer size = 70; private String name; private Image image; public TestLabel(Integer size, String name) { this.name = name; this.size = size; setSize(size, size + size / 4); this.image = new ImageIcon(new Node().getClass().getResource("/com/businesslense/topology/images/node1.jpg")).getImage(); JLabel textLabel = new JLabel(name); textLabel.setBounds(100,100,70,30); add(textLabel); setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(255, 0, 51), 2)); } @Override public void paintComponent(Graphics g) { Graphics2D g2d = (Graphics2D) g.create(); g2d.setStroke(new BasicStroke(4, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); int imagePaddingVal = (int) ((Math.sqrt(2) * (((size * 115) / 100) / 2))) / 4; int imageSize = (size * 85) / 100; int imageRadius = (int) (Math.sqrt(2) * (imageSize / 2)); g2d.drawImage(image, imagePaddingVal, imagePaddingVal, imageRadius, imageRadius, this); int shapePaddingVal = (size * 5) / 100; int shapeRadius = (size * 90) / 100; g2d.drawOval(shapePaddingVal, shapePaddingVal, shapeRadius, shapeRadius); g2d.setStroke(new BasicStroke(0, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); } public static void main(String argv[]){ TestLabel tl = new TestLabel(70,"Test"); JFrame jf = new JFrame(); jf.add(tl); jf.setVisible(true); jf.setSize(300, 400); } }
在此示例中,JLable位于面板顶部。我想将其向下移动到图像/形状。
我尝试了,setBounds()但是没有用。请告诉我我是否缺少什么。
setBounds()
考虑使用API的可用功能…
看一眼:
JLabel#setHorizontalTextPosition
JLabel#setVerticalTextPosition
例如…
private ImageIcon image; public TestLabel100(Integer size, String name) { //... JLabel textLabel = new JLabel(name); textLabel.setIcon(image); textLabel.setHorizontalTextPosition(JLabel.CENTER); textLabel.setVerticalTextPosition(JLabel.SOUTH); //textLabel.setBounds(100, 100, 70, 30); //... } @Override public void paintComponent(Graphics g) { super.paintComponent(g); //...