【问题标题】:Positioning JLabel in JPanel below the image将 JLabel 在 JPanel 中定位在图像下方
【发布时间】:2014-02-06 04:35:36
【问题描述】:

我想在给定示例中将文本移动到图像和形状下方。 请帮我做。

    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(),但没有奏效。如果我遗漏了什么,请告诉我。

【问题讨论】:

  • 请注意,未能调用 super.paintComponent 将生成无法使用的绘图工件
  • 只需使用g.drawString。忘记标签。仅供参考,您的 setBounds 不起作用的原因是它仅适用于空布局。 JPanel 有一个默认的 FlowLayout

标签: java swing jpanel jlabel


【解决方案1】:

考虑利用 API 的可用功能...

看看:

例如...

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);
    //...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 2013-11-21
    相关资源
    最近更新 更多