RORlin123 2021-06-08 00:35 采纳率: 66.7%
浏览 28
已采纳

求救,为啥setY()值没有赋值成功,不在paint()方法中new Hero()反而可以赋值

  1. public class MyPanel extends JFrame {
    	
    	private Panel panel= new Panel();
    	
    	public MyPanel(){
    		super();
    		this.setBounds(300, 200, 450, 500);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		this.addKeyListener(panel);
    		this.add(panel );
    		this.setVisible(true);
    
    		
    	}
    	
    
    }
    class Panel extends JPanel implements KeyListener{
    	private  Hero hero;
    
    	@Override
    	public void paint(Graphics g) {
    		super.paint(g);
    		g.fillRect(0, 0, 450, 500);
    		//画x英雄坦克
    	    hero=new Hero(50, 100,  0);
    		System.out.println(hero);
    		drawTanke(hero, g);
    			
    		
    	}
    	
    	public void drawTanke(Hero t,Graphics g) {
    		
    		switch (t.getFangxiang()) {
    		
    			case 0: {
    				g.setColor(Color.YELLOW);
    				g.fill3DRect(t.getX(), t.getY(), 10, 60, false);
    				g.fill3DRect(t.getX()+30, t.getY(), 10, 60, false);
    				g.fill3DRect(t.getX()+10, t.getY()+18, 20, 25, false);
    				g.fillOval(t.getX()+10, t.getY()+18, 20,25);
    				g.fill3DRect(t.getX()+18, t.getY(), 5, 21, false);
    				
    			}
    			default:
    			
    		}
    		
    		
    		
    	}
    
    	@Override
    	public void keyTyped(KeyEvent e) {
    		// TODO Auto-generated method stub
    		
    	}
    
    	@Override
    	public void keyPressed(KeyEvent e) {
    		System.out.println("按下了" +e.getKeyCode());
    		
    		if (e.getKeyCode()==38 && hero !=null) {
    			
    			System.out.println(hero);
    	
    			int y = hero.getY();
    			System.out.println(y);
    			y =--y;
    			System.out.println(y);
    			hero.setY(y);
    			
    			
    			
    		}
    		repaint();
    	}
输出结果

Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
按下了38
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
100
99
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
按下了38
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
100
99
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
按下了38
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
100
99
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
按下了38
Hero [getX()=50, getY()=100, isLive()=true, getFangxiang()=0]
100
99
  • 写回答

1条回答 默认 最新

  • zhshchilss 2021-06-08 18:15
    关注

    每次paint你都new了一个对象给hero,永远是50,100,0,用一个不行吗
    private Hero hero = new Hero();
    直接初始化,

    或者paint

    if(hero != null){

    hero = new Hero() ;

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有人能看一下我宿舍管理系统的报修功能该怎么改啊?链表那里总是越界
  • ¥15 cs loadimage运行不了,easyx也下了,没有用
  • ¥15 r包runway详细安装教程
  • ¥15 Html中读取Json文件中数据并制作表格
  • ¥15 谁有RH342练习环境
  • ¥15 STM32F407 DMA中断问题
  • ¥15 uniapp连接阿里云无法发布消息和订阅
  • ¥25 麦当劳点餐系统代码纠错
  • ¥15 轮班监督委员会问题。
  • ¥20 关于变压器的具体案例分析