【问题标题】:Adding components over image在图像上添加组件
【发布时间】:2015-09-14 19:39:01
【问题描述】:

我一直在互联网上寻找如何在图像上添加组件的解决方案。我试过这个:

    setContentPane(new JComponent(){
        @Override
        protected void paintComponent(Graphics g){
            URL url = ...;
            if(url==null){
                //... Irelevant
                return;
            }
            try {
                BufferedImage img = ImageIO.read(url);
                g.drawImage(img,0 ,0, this);
                super.paintComponents(g);
            } catch (IOException e) {
                //... Irelevant
                e.printStackTrace();
                return;
            }

        }
    });
    nameLabel=new JLabel("<html><body>"+Main.translateColorsToHTML(name)+"</body></html>");
    nameLabel.setAlignmentX(Component.LEFT_ALIGNMENT);
    nameLabel.setVisible(true);
    add(nameLabel);

哪个没用,所以我试过这个:

    URL url = ...;//Fetching the url
    if(url==null){
        //... Unrelevant
        return;
    }
    try {
        BufferedImage img = ImageIO.read(url);
        invImg = new JLabel(new ImageIcon(img));
        invImg.setMaximumSize(new Dimension(340, 250));
        setContentPane(invImg);
    } catch (IOException e) {
        e.printStackTrace();
        return;
    }

然后将组件添加到内容窗格/框架本身。 我绝对不知道如何做到这一点,任何帮助将不胜感激。 提前致谢!

【问题讨论】:

  • 尝试在调用 super.paintComponent 之后绘制图像,应该始终调用它

标签: java swing components


【解决方案1】:

我找到了一个很好的解决方案:

BufferedImage img = ImageIO.read(url);
invImg = new JLabel();
invImg.setIcon(new ImageIcon(img));
invImg.setLayout(new BoxLayout(invImg, BoxLayout.Y_AXIS));
setContentPane(invImg);

【讨论】:

  • 以这种方式使用JLabel 的问题是标签不会满足子组件的首选大小,而只会满足标签本身的图像/文本属性的要求
【解决方案2】:

介意在您的JFrame 上添加jPanel 吗? (这几乎总是一个更好的主意)

在你的 JFrame 上添加一个 jPanel,然后在上面画画。

Overridepaint(Graphics2D g)paint(Graphics2D g) 方法(继承自 JComponent)并像这样绘制你的图像

yourPanel = new javax.swing.JPanel(){
            @Override
            public void paint(Graphics g) {
                super.paint(g);
                g.drawImage(yourImage, null, x, y);
            }
}

【讨论】:

  • 我试过了,但由于某种原因它不起作用。无论如何,我找到了解决方案。无论如何,谢谢!
猜你喜欢
  • 2021-10-24
  • 2021-11-23
  • 1970-01-01
  • 2021-08-06
  • 2013-07-29
  • 1970-01-01
  • 2021-08-05
  • 2021-01-28
  • 1970-01-01
相关资源
最近更新 更多