gpt4 book ai didi

java - 内部类 JPanel 的奇怪之处

转载 作者:行者123 更新时间:2023-11-29 05:40:43 25 4
gpt4 key购买 nike

我试图覆盖内部类 JPanel 中的方法 paintComponent 并绘制一些图片。但是如果我在构造函数中加载图像,则不会调用 paintComponent 方法。如果在主类中加载图像,一切都很好。它是什么?这是代码,它不起作用

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Main {
JFrame window;
//Image image=new ImageIcon("D://domik.png").getImage();

class JPanelExt extends JPanel {
Image image;

public JPanelExt (){
image=new ImageIcon("D://domik.png").getImage();
System.out.println("constructor");
}

@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
System.out.println("paint");
g.drawImage(image, 0, 0, this);
g.drawRect(0, 400, 100, 100);
}
}

public Main(){

window=new JFrame("Flowers");
window.setSize(430, 480);
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanelExt flower1 =new JPanelExt();
flower1.setBounds(100, 100, 200, 200);
flower1.setToolTipText("House");
window.setLayout(null);
window.add(flower1);
}
public static void main(String[] args) {

Main main=new Main();
}
}

并且sysout只写“构造函数”

但是如果我这样修改代码

public class Main {
JFrame window;
Image image=new ImageIcon("D://domik.png").getImage();

class JPanelExt extends JPanel {
//Image image;

public JPanelExt (){

//image=new ImageIcon("D://domik.png").getImage();
System.out.println("constructor");
}

@Override
public void paintComponent(Graphics g) {

super.paintComponent(g);
System.out.println("paint");
g.drawImage(image, 0, 0, this);
g.drawRect(0, 400, 100, 100);

}

然后 sysout 写入“constructor”、“paint”

我不明白这个))

最佳答案

您的“问题”是 Main 构造函数中语句的顺序。

首先,您要构建一个新框架。其次,您将其设置为可见。此时它已被绘制,并在其关联的面板上调用绘制方法。同样在这一点上,没有关联的面板。第三,构造一个新的 JPanelExt 并将其添加到框架中。这不会导致重新绘制框架。

调用电话

window.setVisible(true);

在施工过程结束时。然后您将看到您的图像。

关于java - 内部类 JPanel 的奇怪之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17692425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com