java - 如何将图像导入JPanel

标签 java image swing graphics jpanel

我正在完成一项作业 (GASP),但我的图像显示出现问题。我并不是在寻找某人来完成我的任务,但我迫切需要一些帮助来找出我的代码无法正常工作的原因。我已经阅读了我的 Java 编程书籍,并在网上搜索了答案,但没有成功,所以如果有人能引导我走向正确的方向,我将不胜感激! 这是我的显示图像代码:

import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class DisplayImage extends JFrame {
public void DislayImage(){
    add (new ImagePanel()); 
}

public static void main(String[] args) {
    JFrame frame = new DisplayImage (); 
    frame.setTitle("Go Bearcats!");
    frame.setSize(300, 300);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    Assignment02 a = new Assignment02();
    frame.add(a); 

}
}
class ImagePanel extends JPanel {
    public final static String LOC = "C:\\UCincinnatiLogo.jpg";
    private ImageIcon imageIcon = new ImageIcon (LOC); 
    private Image image = imageIcon.getImage(); 

    @Override /**Draw image on the panel*/
    protected void paintComponent(Graphics g){
        super.paintComponent(g);

        if (image !=null)
            g.drawImage(image, 200, 200, getWidth(), getHeight(), this); 
    }

 }

最佳答案

您正在图像面板的正上方添加一个组件。 JFrame 使用 borderLayout,因此您在其中添加的任何内容都将覆盖之前添加的任何内容。

JFrame frame = new DisplayImage (); 
frame.setTitle("Go Bearcats!");
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
Assignment02 a = new Assignment02();
frame.add(a);  // here you add something on top of your imagePanel

相反,通过 setContentPane(...) 将 ImagePanel 设置为 JFrame 的 contentPane,然后将内容添加到 JFrame/contentPane,但请确保它们不是不透明的。

public class DisplayImage extends JFrame {
public void DislayImage(){
    setContentPane(new ImagePanel()); 
}

然后,

Assignment02 a = new Assignment02();
a.setOpaque(false);  
frame.add(a);

请注意,顺便说一句,我很少创建任何扩展 JFrame 的类,而是在需要时创建我的 JFrame。相反,我会创建 ImagePane,然后直接向其中添加组件,然后再将所有组件添加到 JFrame。


此外,您没有向我们展示Assignment02类,但它最好具有非不透明的JPanels和组件。

关于java - 如何将图像导入JPanel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25775510/

相关文章:

java - 检测到无限循环,部分 ../foo.mustache 先前已加载

Android 如何使用图像的获取设置方法?

c# - 如何在后台加载图像?

html - 在图像上映射一个点

java - JTable 在 setBackground() 上指定列号和行号

java - JScrollPane JScrollBar 住宿

java - 由于缺少库而导致构建失败

java - android 中 facebook API 的位置值为 null

java - Java中为BufferredImage添加模糊效果

java - paint() 和 paintcomponent() 的区别?