Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPanel透明背景和显示元素_Java_Swing_Jpanel - Fatal编程技术网

Java JPanel透明背景和显示元素

Java JPanel透明背景和显示元素,java,swing,jpanel,Java,Swing,Jpanel,我在JPanel中插入了背景图像,但一些界面元素消失了。以下Java Swing元素不显示: 标签_titulo 乌萨里奥标签 标签密码 按钮接受器 **你能使图像透明或元素不不透明(setOpaque(false)),即使把它放在那些元素上对我也不起作用 为什么有些元素有用灰色封装的矩形** 代码: public class InicioSesion extends javax.swing.JFrame{ private Image imagenFondo; private

我在
JPanel
中插入了背景图像,但一些界面元素消失了。以下Java Swing元素不显示:

  • 标签_titulo
  • 乌萨里奥标签
  • 标签密码
  • 按钮接受器
**你能使图像透明或元素不不透明(setOpaque(false)),即使把它放在那些元素上对我也不起作用

为什么有些元素有用灰色封装的矩形**

代码:

public class InicioSesion extends javax.swing.JFrame{
    private Image imagenFondo;
    private URL fondo;

    public InicioSesion(){
        initComponents();

        try{
            fondo = this.getClass().getResource("fondo.jpg");
            imagenFondo = ImageIO.read(fondo);
        }catch(IOException ex){
            ex.printStackTrace();
            System.out.print("Imagen no cargada.");
        }
    }


    @Override
    public void paint(Graphics g){
        super.paint(g);
        g.drawImage(imagenFondo, 0, 0, getWidth(), getHeight(), this);
    }
}
加载“RUN”时,我会看到.java文件,如下所示:

最初的设计如下:

不要覆盖paint()。绘制方法负责绘制子零部件。因此,您的代码绘制子组件,然后在组件顶部绘制图像

相反,对于组件的自定义绘制,您可以覆盖
JPanel的
paintComponent()
方法:

protected void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(imagenFondo, 0, 0, getWidth(), getHeight(), this);
}
有关更多信息,请阅读Swing tutorail上的部分

编辑:

阅读
自定义绘制
上Swing教程的整个部分。解决方案是在JPanel上进行自定义绘制,然后将面板添加到框架中


框架的内容窗格是JPanel。因此,实际上,您将使用绘制背景图像的自定义JPanel替换默认内容窗格。将自定义面板的布局设置为
BorderLayout
,它将像默认的内容窗格一样工作。

登录屏幕最好用JDialog实现,而不是JFrame。@GilbertLeBlanc好的,我刚刚更改了它。你为什么问这个问题?您已经有了上一个问题的答案:。你为什么要浪费我们的时间,把代码改成在框架上而不是在JPanel上画画?@camickr错误:super.paintComponent(g);不能使用符号found@camick所以我必须使用什么方法?paint(Graphics g)或paintComponent(Graphics g)@omaza1990,我没有注意到你在扩展JFrame,你的问题只涉及一个JPanel。对于自定义绘制,不应扩展JFrame。自定义绘制是在Swing组件上完成的,在您的示例中是
JPanel
。参见编辑。1)问题已得到回答。2) 你在上一个问题中已经得到了相同的答案。因此,当你已经有了答案时,没有必要继续发布相同的问题。有什么要讨论的?您的主题标题是关于
JPanel
。因此,我为您提供了一个关于如何在JPanel上正确绘制的答案。然后我意识到您的代码实际上使用的是JFrame,而不是panel,因此我澄清了答案,并提供了一个指向Swing教程的链接,其中包含一个完整的示例。后来我意识到你已经有了一个前一天一个问题的有效例子。您已经获得了大量有关如何在面板上绘制背景图像以及如何向同一面板添加组件的信息。
protected void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(imagenFondo, 0, 0, getWidth(), getHeight(), this);
}