我和ye猫子 2014-08-27 08:09 采纳率: 0%
浏览 1088

在用java swing 时遇到关于设置背景图片的问题

public class LoginPanel extends JPanel {
protected ImageIcon icon;//protected的访问权限是同一个包的类即可访问它
public int width,height;

public LoginPanel(){
    super();//调用父类的构造方法,此处可以不显示调用,系统会自动隐式调用
    icon=new ImageIcon("res/login.jpg");
    width=icon.getIconWidth();
    height=icon.getIconHeight();
    setSize(width,height);//调用继承自父类JPanel中 的setSize()方法设置面板的大小因为是继承来的是自己的了所以在类内可以不用实例对象去调用
    //this.setSize(width,height);
}


//想要将这张图片作为背景图片,是不能直接使用add()方法添加该icon对象的;在LoginPanel类中重写paintComponent()方法,并在该方法中调用Graphics类的drawImage()方法绘制该图片
//重写paintComponent()方法
protected void paintComponent(Graphics g){
    super.paintComponent(g);//调用父类的paintComponent()方法
    Image img = icon.getImage();
    g.drawImage(img,100,100,this);//在当前面板中绘制该Image文件 img;this参数表示图片绘制在哪里
    System.out.println("执行了paintComponent()方法");
}

为什么在主类中使用new LoginPanel()实现一个实例对象时,函数会执行重写的paintComponent(Graphics g)方法(输出了执行了paintComponent()方法);原则上这个方法LoginPanel中的实例方法,,在实例化类的时候不应该会执行的啊? 请问为什么这里会被执行,或者说实例化 对象时类中的哪些部分会被执行哪些不被执行,求大神帮忙总结一下
附测试用的主函数代码
public class test {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame jf = new JFrame();
    jf.add(new LoginPanel());
    jf.setVisible(true);
    jf.setSize(800,800);
    jf.setLocationRelativeTo(null);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}

}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 12:59
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Java Swing中,当创建一个新的窗口或组件时,Swing框架会在后台运行一系列初始化操作。这些操作包括:

    1. 初始化布局管理器(如果设置了)
    2. 初始化容器(在这个例子中,LoginPanel 是组件,所以它本身就是一个容器)
    3. 设置容器的布局管理器
    4. 创建和设置组件的位置和大小
    5. 创建组件的事件处理器(如果有)

    在上述过程中,Swing框架会自动调用 paintComponent() 方法。这是为了确保在组件被放置到容器上之前,能够进行必要的渲染工作。

    因此,在你的例子中,即使你没有显式地调用 paintComponent() 方法,Swing框架也会自动调用它。这并不是错误,而是正常的编程行为。

    评论

报告相同问题?