当前位置: 首页 > 面试题库 >

将JLabel放置在图像下方的JPanel中

柳向明
2023-03-14
问题内容

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

    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()但是没有用。请告诉我我是否缺少什么。


问题答案:

考虑使用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);
    //...


 类似资料:
  • 对于我的应用程序,我正在创建一个脚本编辑器。目前,我在一个包含JLabels表示的JPanel中显示了行号。但是,当我添加新的来表示新的行号时,会出现在面板的中心,即使我设置了的和。我想要它,以便标签将出现在彼此的下面。 JPanel类构造函数,它包含所有JLabels: 将JLabels添加到JPanel的方法: 添加新JLabels时的当前外观:

  • 问题内容: 我正在使用NetBeans GUI构建器来处理我的布局(我对LayoutManagers很糟糕),并试图放置一个简单的JLabel,以使其始终(水平)居于其父JPanel内部。理想情况下,即使调整了JPanel的大小,这也将保持正确,但是,如果这是一个疯狂的编码,比第一次创建JPanel时居中就足够了。 我自己尝试处理布局已经很糟糕了,但是由于NetBeans GUI Builder自

  • 我有JPanel,它包含: JButton和JLabel,其中设置了图片 我想把按钮放在JLabel顶部的北中心位置。目前它的设置彼此相邻,我不知道如何覆盖JLabel。 我在这里尝试了许多解决方案,但是它似乎并不完全按照我想要的方式工作。谢谢! 更新:按钮放在JLabel的顶部,但不在里面。

  • 问题内容: 我正在尝试用GUI制作棋盘游戏。我用 播放器的名称创建了一个JLabel,并希望将其用作令牌。然后,我制作了另一个JLabel, 其中包含板的图像。我将两个标签都添加到boardPanel上, 现在,这些标签并排放置。我如何做到这一点, 以使JLabel带有名称而不是并排放置在带有img的JLabel上? 对于包含两个 标签的面板,我应该考虑些什么吗?像某个布局管理器一样? [只是我的

  • 问题内容: 我试图将一系列JLabel放置在JPanel上的特定X和Y坐标上(并设置其高度和宽度)。无论我做什么,每个标签都会立即跳到上一个标签的右侧,并且具有与所有其他标签完全相同的尺寸。 现在,我的Jpanel位于网格布局中。我尝试了绝对布局(非法参数异常结果),自由设计(没有标签出现),流程布局(所有内容都被压缩到中间)以及其他一些内容。 不知道我需要做些什么才能使这项工作。有人可以帮忙吗?

  • 我的问题是:我在JPanel中显示了一个JLabel的数组列表和一个JPanel的按钮,当我按下按钮时,我想在JLabel的上方显示我的JPanel。但是当我按下按钮时,我的JPanel在标签下面。 请不要告诉我使用JLayerPane,因为如果我可以不用它,那将是最好的。感谢您的解决方案。 这是我的代码的一个例子:要运行这个,请在这里找到图像100x100: http://www.html5ga