Java 设置jpanel的背景时,其组件将赢得';我没被展示出来
我试图为我的JPanel设置一个背景图像,其中包含一些其他组件,如Jlabel、JCheckBox、JTextField。我确实通过创建另一个类并扩展JPanel添加了背景,因此覆盖了paintComponent()。图像设置得非常完美,但那些标签和,不会显示。只有按钮会显示,当我将鼠标移到按钮上时(复选框也会显示,但是,当它们显示时,它们包含自己的背景,这会干扰图像) 我的代码:Java 设置jpanel的背景时,其组件将赢得';我没被展示出来,java,swing,background,jpanel,paintcomponent,Java,Swing,Background,Jpanel,Paintcomponent,我试图为我的JPanel设置一个背景图像,其中包含一些其他组件,如Jlabel、JCheckBox、JTextField。我确实通过创建另一个类并扩展JPanel添加了背景,因此覆盖了paintComponent()。图像设置得非常完美,但那些标签和,不会显示。只有按钮会显示,当我将鼠标移到按钮上时(复选框也会显示,但是,当它们显示时,它们包含自己的背景,这会干扰图像) 我的代码: public class ImagePanel extends JPanel { private Image i
public class ImagePanel extends JPanel {
private Image image;
ImagePanel(String path){
this(new ImageIcon(path).getImage());
}
ImagePanel(Image image){
this.image=image;
Dimension size=new Dimension(796, 481);
setSize(size);
setLayout(null);
}
@Override
public void paintComponent(Graphics g) {
//numbers are the size of the main JPanel
g.drawImage(image,0,0,796,481, this);
}
}
然后将它的对象添加到我的主JPanel中,它包含组件。对于这些组件,我只设置了大小和位置,没有其他设置。请帮忙
提前谢谢
答案已经找到,谢谢大家的参与。答案在评论中。
public void paintComponent(Graphics g){..
应该是public void paintComponent(Graphics g){super.paintComponent(g);..
1)g.drawImage(image,0,0796481,null);
应该是g.drawImage(图像,0,0796481,此);
(每个JComponent
都是ImageObserver
)2)应将@Override
符号添加到任何重写的方法中。3)维度大小=新维度(796481);设置大小(size);
将一无所获。对于特定的大小,重写getPreferredSize()
方法。大多数版面管理器都会尊重这一点,并将其周围的框架整齐地包装起来。4)查看应该解决的问题。5)新建图像图标(路径)。getImage()是一种非常脆弱的加载图像的方法。使用ImageIO.read(URL)
用于在找不到图像时提供有用的输出。另外请注意,面板的背景图像显然是一种应用程序资源,因此需要通过URL而不是文件加载…实际上,此代码应该扔掉,重新开始。它的错误比正确的多。@andrewhompson这会有什么区别?cou请解释一下?(用于添加super.paintComponent(g))您必须将您的Swing组件添加到错误绘制图像的同一JPanel中。由于您需要对所有内容进行解释,请阅读Oracle教程。跳过Netbeans部分,每隔一节学习一次。最后,从创建简单的Swing GUI开始,然后担心如何使其“美观”与背景图像。