我正在完成一项作业 (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/