我在框架上显示图像时遇到问题。当显示图片时,左上角没有进入指定的(0,0),当我第一次运行时,窗口的背景也会显示窗口后面的任何内容的可视组件。有人知道什么是错的吗?提前致谢 -
import java.awt.image.ImageObserver;
import java.io.File;
import javax.imageio.*;
import javax.swing.*;
public class Window extends JFrame{
//the pictures
Image testImage = null;
Image backPic = null;
//constructor
Window(){
super("window");
this.startWindow();
}
public void startWindow(){
Image customIcon = Toolkit.getDefaultToolkit().getImage("iconImage.gif");
testImage = Toolkit.getDefaultToolkit().getImage("tester.gif");
backPic = Toolkit.getDefaultToolkit().getImage("black.png");
setSize(700,600);
setIconImage(customIcon);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
setResizable(false);
setLocationRelativeTo(null);
}
public void paint(Graphics g){
g.drawImage(testImage,0,0,null);
}
}
答案 0 :(得分:3)
问题是,在调用paint()
时,您的testImage尚未完全加载。要解决此问题,您可以改为调用它:
g.drawImage(testImage,0,0,this);
但我首选的方法是使用JLabel并让它处理图像绘制。我还强烈建议不要覆盖JFrame.paint()
(如果你这样做,至少要调用super.paint(g)
)。如果您确实想自己绘制图片,请展开JComponent
并覆盖paintComponent()
答案 1 :(得分:2)
所以我建议您使用JLabels
来显示Images
,这是您可以肯定使用的最简单方法。我创建了类似的基本项目,以此方式展示。
/**
* @author Sajmon
*/
package com.sajmon.window;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Window extends JFrame {
private JLabel pictureLabel;
private Container controls;
public Window() {
super("window");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
this.setSize(300, 300);
this.startWindow();
}
private void startWindow() {
controls = new Container();
controls = getContentPane();
controls.setLayout(new FlowLayout());
pictureLabel = new JLabel(new ImageIcon("picture.png"));
controls.add(pictureLabel);
}
}
运行应用程序的主要方法。
/**
*
* @author Sajmon
*/
public class Main {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
Window w = new Window();
w.setVisible(true);
}
});
}
}
注意:如果使用Swing,则应使用Runnable接口启动应用程序。通常建议采用这种方式。
希望它有所帮助。