java - 没有调用paintComponent
问题描述
抱歉,可能已经解决了一个问题,但我到处搜索,找不到解决方案。我刚刚发现,无论如何,无论我把 repaint() 放在哪里,都不会调用paintComponent
我已经尝试将它放在几种不同的方法中,并尝试从不同的区域调用它,但无论如何,它似乎永远不会被调用。
import java.awt.*;
import java.awt.event.*;
import java.awt.Component;
import javax.swing.*;
import javax.swing.BoxLayout;
import javax.swing.event.*;
import java.awt.event.KeyEvent;
import java.util.Scanner;
public class LevelOne extends JPanel implements KeyListener
{
int width = 0;
int height = 0;
int bx = 0;
int hx = 0;
int by = 0;
int hy = 0;
Image joe = new ImageIcon("upgrademan.png").getImage();
ImagePanel2 panel2 = new ImagePanel2(new ImageIcon("levelone.png").getImage());
JFrame frame = new JFrame ("Level One");
public LevelOne()
{
frame.getContentPane().add(panel2);
Game game1 = new Game();
frame.setSize(600, 600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBackground(Color.WHITE);
frame.pack();
frame.setVisible(true);
levelOne();
requestFocus();
}
public void levelOne()
{
repaint(); // this doesn't call paintComponent below?
}
public void paintComponent(Graphics g)
{
super.paintComponent(g); //draw background color
System.out.println("this enters paintComponent");
g.drawImage(joe,100,100,200,200, null); // this doesn't seem to be drawing
requestFocus();
}
public void keyPressed(KeyEvent e) // all they keyListener methods
{
}
public void keyTyped(KeyEvent e)
{
}
public void keyReleased(KeyEvent e)
{
}
}
class ImagePanel2 extends JPanel { // this entire class simply exists to call in order to set a picture as a background
Image img;
public ImagePanel2(String img) { // just sets img in method to class img variable
this(new ImageIcon(img).getImage());
}
public ImagePanel2(Image img) { // sets size of picture
this.img = img;
Dimension dims = new Dimension(600,600);
setPreferredSize(dims);
setMinimumSize(dims);
setMaximumSize(dims);
setSize(dims);
setLayout(null);
}
public void paintComponent(Graphics g) { // draws image
g.drawImage(img, 0, 0, this);
}
}
我希望 ImagePanel 类打印背景,它确实做到了,但我也希望打印名为 joe 的图像,但它没有。
解决方案
显示“joe”的唯一位置是 LevelOne 实例的 paintComponent() 方法。但是您永远不会将 LevelOne 实例添加到您的框架或该框架中的任何面板。
推荐阅读
- c++ - 尝试旋转空文件时提升日志rotate_file引发错误?
- java - 如何使用 Java 8 流组合逻辑以根据列表大小条件添加到列表中
- delphi - 无法使用 Delphi TWebBrowser 加载站点
- excel - 工作表中的命名范围计数在具有命名范围时结果为零
- foreign-keys - 我的 CRUD 应用程序应该对数据执行验证还是应该是数据库操作?
- javascript - 如何在 Visual Studio 中导入 JavaScript 库?
- sql - 从作为输入 oracle 传递的日期中查找星期
- laravel - Laravel 嵌套:事件(带时间线)和子事件(带时间线)
- visual-studio-code - 用于预定义文本替换的 VSCode 快捷方式/扩展?
- javascript - 如何将 bbcode 字符转换为 jsx?(丰富的文字)