【发布时间】:2019-09-01 06:25:15
【问题描述】:
在上一帧创建实例后,我试图在下一帧设置背景图像,但结果,我刚刚看到调试结果,发现没有调用paint方法。据我所知,paint 方法是由 JFrame 类继承的,并且使用此逻辑,我已将其覆盖。正如我猜测的那样,发生逻辑错误的原因是我使用了事件处理程序并在 EventHandlerClass 中创建了实例。
if(e.getActionCommand().equals(ButtonTo))
if(idString.equals("USER"))
{
{
if("1234".equals(pwSt))
{
System.out.println("Wellcome");
if(gs==null)
{
gs=new GameStart();
}
}
else
{
System.out.println("Confirm your password");
}
}
}
这是一个代码,如果执行一个动作,它将创建一个实例(gs)。完成此操作后,我注意到该实例已用于制作新的控制台框架。
class GameStart extends JFrame {
private Image screenImage;
private Graphics screenGraphic;
private Image introBackgroundImage;
private ImageIcon img;
GameStart()
{
JFrame jf=new JFrame("Game Set");
jf.setBounds(300, 300, 400, 200);
jf.setLayout(new BorderLayout());
JButton bt1=new JButton("Start");
JButton bt2=new JButton("Exit");
JPanel panel1=new JPanel();
panel1.add(bt1);panel1.add(bt2);
setContentPane(panel1);
jf.add(panel1, BorderLayout.SOUTH);
bt1.addActionListener(new Choice());
bt2.addActionListener(new Choice());
jf.setVisible(true);
img=new ImageIcon("./Images/backGroundImage.jpg");
System.out.println("1");
}
public void paint(Graphics g) {
screenImage=createImage(200, 200);
screenGraphic=screenImage.getGraphics();
screenDraw(screenGraphic);
g.drawImage(screenImage, 0, 0, null);
System.out.println("2");
}
public void screenDraw(Graphics g)
{
this.repaint();
System.out.println("3");
}
现在,通过制作一个框架和一些按钮,我希望显示所有表示结果的数字(1、2、3),但只是做了数字 1。
【问题讨论】:
-
不要覆盖 JFrame 上的paint()。自定义绘画是通过覆盖 JPanel 的
paintComponent(...)来完成的,然后将面板添加到框架中。阅读 Custom Painting 上的 Swing 教程中的部分,了解更多信息和工作示例,以帮助您入门。您还可以查看Background Panel,这是一个可用于轻松将图像显示为背景的类。 -
您能否充实您的代码示例?特别是,您有一个
if语句,它应该在一个类内部的方法中。 -
请发帖minimal reproducible example,包括
createImage()。 不要在paint内部调用repaint