我正在尝试将背景图像添加到 Jpanel。下面是我正在使用的代码
private void createUIComponents() {
JPanel panel1 = new BgPanel();
}
class BgPanel extends JPanel {
Image bg = new ImageIcon("image.png").getImage();
@Override
public void paintComponent(Graphics g) {
g.drawImage(bg, 0, 0, getWidth(), getHeight(), this);
}
}
我正在使用 IntelliJ,因此大部分 GUI 代码都是隐藏的。自定义创建的 JPanel 不应该是一个 BgPanel 并因此显示图像吗?我哪里做错了?
尝试编译时出现以下情况:
Exception in thread "main" java.lang.NullPointerException
at testGUI.$$$setupUI$$$(testGUI.java)
at testGUI.<init>(testGUI.java:4)
at testGUI.main(testGUI.java:11)
完整代码:
import javax.swing.*;
import java.awt.*;
public class testGUI {
private JButton button1;
private JPanel panel1;
public static void main(String[] args) {
JFrame frame = new JFrame("testGUI");
frame.setContentPane(new testGUI().panel1);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
private void createUIComponents() {
JPanel panel1 = new BgPanel();
}
class BgPanel extends JPanel {
Image bg = new ImageIcon("imagelink.png").getImage();
@Override
public void paintComponent(Graphics g) {
g.drawImage(bg, 0, 0, getWidth(), getHeight(), this);
}
}
}
试试这个:
class BgPanel extends JPanel {
private final BufferedImage image;
public BgPanel() throws IOException {
image = ImageIO.read(new File("path-to-image"));
}
@Override
public void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
}
}
希望它会起作用完整代码:
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class testGUI {
private JButton button1;
private JPanel panel1;
public static void main(String[] args) throws IOException {
JFrame frame = new JFrame("testGUI");
frame.getContentPane().add(new BgPanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
static class BgPanel extends JPanel {
private final BufferedImage image;
public BgPanel() throws IOException {
setPreferredSize(new Dimension(400,800));
image = ImageIO.read(new File("C:\Users\Sourav\Desktop\fb\IMG_20171209_181249.jpg"));
}
@Override
public void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
}
}
}