大佬教程收集整理的这篇文章主要介绍了图像未在 Java Swing 中添加为背景,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个代码,我正在尝试在背景中添加图片显示作为墙纸。我用这个 stackoverflow post 作为参考,但它没有用。我的图像被添加到面板中,但不是作为背景。可能是什么问题?
旁注,.setLOCATIOn()
也不会更新按钮的位置。提前致谢!
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import net.miginfocom.swing.MigLayout;
import java.awt.image.bufferedImage;
import java.io.IOException;
import java.sql.*;
class APP extends JPanel
{
JFrame frame = new JFrame();
JPanel panel;
class ImagePanel extends JComponent {
Image image;
public ImagePanel(Image imagE) {
this.image = image;
}
@OverrIDe
protected voID paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image,100,25,this);
}
}
public APP(){
JLabel picLabel = new JLabel();
try {
BufferedImage image = ImageIO.read(getClass().getresource("login_bg.jpg"));
this.setContentPane(new ImagePanel(imagE));
picLabel = new JLabel(new ImageIcon(imagE));
//picLabel.setBounds(100,843,568);
} catch (IOException E){
e.printstacktrace();
}
panel = new JPanel(); // used to do padding like in HTML
panel.setborder(borderFactory.createEmptyborder(50,350,300,350));
panel.setLayout(null));
panel.add(picLabel);
frame.add(panel,borderLayout.CENTER);
frame.getContentPane();
frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
frame.settitle("Drone Delivery");
frame.pack();
frame.setVisible(true);
}
}
仍然不是 MRE,但要好一点,所以我会提出更多建议:
代码的基本问题:
您的逻辑正在尝试用您绘制图像的自定义类替换默认内容窗格。正如我在上面的“提示”中所建议的,如果您想要背景图像,那么 a) 组件应该扩展 JPanel,并且 b) 您需要在类的构造函数中将布局管理器设置为 BorderLayouut。现在您将能够向面板添加子组件。
您有两个 JFrame 实例。您的类扩展 JFrame,并在构造函数中创建 JFrame 的新实例。不要扩展 JFrame。
您的 ImagePanel 需要添加到在构造函数中创建的“框架”中。
所以您的解决方案的第一部分是简单地让这个逻辑工作。这就是您所需要的 JFrame,其中您的 ImagePanel 添加为框架的内容窗格。
然后进入下一步。
我的图像被添加到面板中,但不是作为背景。
实际上,由于上述原因,它并未添加为背景。您看到的是包含 ImageIcon 的“JLabel”。去掉标签。
//frame.getContentPane().setLayout(new FlowLayout());
上面的语句是不需要的。如果您按照我上面的提示操作,您应该已经在类的构造函数中设置了“ImagePanel”的布局管理器。
frame.add(panel,BorderLayout.CENTER);
尝试一下,看看会发生什么。您的面板将覆盖图像。
现在尝试:
frame.add(panel,BorderLayout.PAGE_START);
您应该会看到框架顶部的组件。
您还可以添加:
panel.setOpaque(false);
您将在组件下方看到图像。
,我建议您使用 JLabel
。这个组件可以有一个布局和组件,以及一个背景图片(通过使用 setIcon(ImageIcon icon)
)。
你的代码有很多问题,还有很多坏习惯。
setLOCATIOn()
仅在禁用 Layoutmanager 后才具有永久效果。
使用 panel.add(create_btn);
,您需要一个带有 LayoutManager 的面板,该面板不会对组件进行任何布局。我不知道 MigLayout,但正如 LayoutManagers 通常所做的那样,他们布置组件。因此,每当 MigLayout 进行任何更改来布局面板的组件时,之前通过 setSize/setLOCATIOn/setBounds 等进行的任何手动更改都会丢失。
你重新使用变量“create_btn”,你实际上没有将第一个添加到任何面板,因此它不会出现。最佳做法:
以上是大佬教程为你收集整理的图像未在 Java Swing 中添加为背景全部内容,希望文章能够帮你解决图像未在 Java Swing 中添加为背景所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。