【问题标题】:Im triying to use a JLabel as a BackGround and I cant [duplicate]我正在尝试使用 JLabel 作为背景,但我不能
【发布时间】:2023-01-23 00:10:05
【问题描述】:
            f = new JFrame();
    f.setExtendedState(JFrame.MAXIMIZED_BOTH);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    
    d = new JPanel();
    f.add(d);
    ImageIcon icon = new ImageIcon("C:\\Users\\jean\\Pictures\\988057.jpg");
    JLabel background = new JLabel(icon);
    background.setSize(d.getSize());
    background.setLocation(0,0);
    d.add(background);
    d.setLayout(null);
    background.setOpaque(true);

    d.add(background, BorderLayout.CENTER, 0);

我试图将 JLabel 作为背景,但我做不到。这条路没问题。发生了什么?

【问题讨论】:

  • 当您的布局为空时,为什么要使用 BorderLayout.CENTER?为什么一开始就使用空布局?
  • 建议: 1. 首先调试——通过在 JOptionPane 中显示 ImageIcon 确保路径正确。传进去看看能不能显示。 2.更好地获取图像作为资源不是作为您尝试做的文件。从课堂上获取资源,并通过ImageIO.get(...)导入图片。 3. 你几乎不应该使用空布局。 4. 要使用图像作为 GUI 的背景,通常最好在背景 JPanel 的 paintComponent 方法中绘制它。
  • 真的谢谢。我会找出问题所在。文件 file = new File("ruta/de/la/imagen.jpg"); BufferedImage image = ImageIO.read(文件);
  • cmets 中的大块代码难以辨认。如果是答案,请发布答案。如果它是问题的一部分,请编辑问题。
  • edit你有任何新信息的问题

标签: java


【解决方案1】:

在向其添加标签和图标之前,您正在调用 f.setVisible(true)。 而且您不想在标签和框架之间添加面板。 你可以试试这个方法,

            f = new JFrame();
            f.setExtendedState(JFrame.MAXIMIZED_BOTH);

            f.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

            ImageIcon icon = new ImageIcon("C:\Users\jean\Pictures\988057.jpg");
            JLabel background = new JLabel();
            background.setIcon(icon);

            background.setSize(f.getSize());
            f.add(background);
            f.setVisible(true);

我希望这会解决你的问题。

【讨论】:

  • 我找到了解决方案。 Imagecon 它不是处理图像的最佳选择。在使用 BufferedImage image = ImageIO.read(file); 时。
  • 但真的很感谢你的帮助。
【解决方案2】:

解决方案。多谢你们。

    f = new JFrame();
    f.setExtendedState(JFrame.MAXIMIZED_BOTH);
    f.setVisible(true);
    f.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
    
    d = new JPanel();
    d.setSize(f.getSize());
    f.add(d);   
    
    File file = new File("C:\Users\jean\Pictures\988057.jpg");

    
    try {
        
        BufferedImage image = ImageIO.read(file);
        JLabel label = new JLabel(new ImageIcon(image));
        label.setSize(d.getSize());
        d.add(label);
        
    } catch (IOException e) {
        e.printStackTrace();
        
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2012-12-04
    相关资源
    最近更新 更多