簡體   English   中英

Swing Netbeans構建器中不顯示背景圖像

[英]Background image doesn't show in Swing Netbeans builder

我在JFrame類上使用netbeans builder“design”。 我有傳統的JFrame,我在其中添加了一個JPanel(使用構建器)。

現在在代碼中,我想為這個面板添加一個背景,如下所示:

public class NewJFrame extends javax.swing.JFrame {

    public NewJFrame() {
        initComponents();
        addBackground();
    }

    private void addBackground()
    {
        Image bgImage;
        try {
            bgImage = ImageIO.read(new File("src/general/Mockup.png"));
            jPanel1.add(new NewJFrame.ImagePanel(bgImage));
            jPanel1.repaint();
        } catch (IOException ex) {
            Logger.getLogger(NewJFrame.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String args[]) {

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
}

我沒有看到任何東西,只是一個空的JFrame / JPanel。

順便說一下,我將它用於ImagePanel代碼

@SuppressWarnings("serial")
class ImagePanel extends JPanel {
    private Image image;

    ImagePanel(Image image) {
        this.image = image;
    };

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
    }
}
  • 你的類ImagePanel extends JPanel {必須覆蓋getPreferredSize()

  • 因為public void paintComponent(Graphics g) {painting in SwingGraphics(2D) painting in Swing )不會將任何大小返回給容器,simple返回Dimmension(0, 0

  • JPanel在API中實現了FlowLayout (僅接受來自其子節點的PreferredSize ),然后您的custom painting永遠不會在屏幕上顯示

什么是jPanel1? 它使用什么布局? GUI渲染后ImagePanel對象有多大? 為什么不簡單地使用帶有圖像的JLabel(或ImagePanel實例)作為JFrame的contentPane,而不是通過所有這些體操? 請注意,這種類型的編碼是我避免使用NetBeans生成的代碼的一個原因。 讓我自己編寫代碼,我可以完全控制GUI所做的一切和顯示。

為什么不簡單地添加JLabel並在構造函數中插入圖像名稱? 喜歡:

JFrame background = new JFrame(“back.png”);

然后,您可以將此標簽直接添加到框架或JPanel。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM