[英]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);
}
}
因為public void paintComponent(Graphics g) {
( painting in Swing
, Graphics(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.