微凉の月色 2020-06-15 00:55 采纳率: 0%
浏览 115

JPanel子类GamePanel调用init()方法放入控件,init中有值来自MainFrame,现在改变该值如何重绘GamePanel?

在这两个事件响应后使用gamePanel.init()和gamePanel.repaint()都不行,请求各位大佬帮忙,非常感激,本人编程小白,恳请各位大佬能讲的详细易懂。

GamePanel部分:

public class GamePanel extends JPanel implements MouseListener {
    private Cell[] cells=new Cell[MainFrame.diff*MainFrame.diff];           //创建单元图片数组
    private Cell cellBlack=null;                //空白   

    public GamePanel(){                         //构造方法
        super();
        setLayout(null);                        //设置空布局
        init();                                 //初始化游戏
    }

    public void init(){
        int x=0;
        int y=0;
        int w=480/MainFrame.diff;
        int h=480/MainFrame.diff;
        BufferedImage src=null;
        BufferedImage newpic=null;
        try {
            src=ImageIO.read(new File("pic\\"+MainFrame.pic+".jpg"));
        } catch (IOException e) {
            System.out.println(e);
        }
        int num=0;                              //图片序号
        Icon icon=null;                         //图片对象
        Cell cell=null;                         //单元图片对象
        for(int i=0;i<MainFrame.diff;i++){      //循环行
            for(int j=0;j<MainFrame.diff;j++){  //循环列
                num=i*MainFrame.diff+j;         //计算图片序号
                x=j*(480/MainFrame.diff);
                y=i*(480/MainFrame.diff);
                newpic=src.getSubimage(x, y, w, h);
                if(num+1==MainFrame.diff*MainFrame.diff){
                    icon=new ImageIcon("pic\\"+(num+1)+".jpg");      //获取空白图片
                }else{
                    icon=new ImageIcon(newpic);
                }
                cell=new Cell(icon,num);         //实例化单元图片对象
                cell.setLocation(j*Cell.IMAGEWIDTH, i*Cell.IMAGEWIDTH);  //设置单元图片的坐标
                cells[num]=cell;                 //将单元图片储存到单元图片数组中
            }
        }
        for(int i=0;i<cells.length;i++){
            this.add(cells[i]);                  //向面板中添加所有单元图片
        }
    }

MainFrame的响应事件:

difficulty.addActionListener(new ActionListener(){
                public void actionPerformed(final ActionEvent e){
                    System.out.println(difficulty.getSelectedItem().toString());
                    if(difficulty.getSelectedItem().toString().equals("简单")){
                        diff=3;
                    }else if(difficulty.getSelectedItem().toString().equals("困难")){
                        diff=4;
                    }else{
                        diff=5;
                    }
                    System.out.println(diff);
                }
            });
randompic.addActionListener(new ActionListener(){           //注册事件
                public void actionPerformed(final ActionEvent e){
                    Random rand=new Random();
                    pic=rand.nextInt(5);
                    System.out.println(pic);
                    //gamePanel.init();
                    //gamePanel.repaint();
                }
            });
  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-08-27 09:45
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 关于#目标检测#的问题:(qq收集表到时间才能填写,填写的份数有上限)
  • ¥50 ZYNQ7020双核FLAHS烧写的问题
  • ¥20 ue 5 中想要实现第一人称人物左右行走摆动的效果,摄像头只向右摆动一次(关键词-结点)
  • ¥15 钢岔管添加弹性约束模拟围岩作用
  • ¥15 AD9164瞬时带宽1.8G,怎么计算出来?
  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除
  • ¥15 使用MATLAB进行余弦相似度计算加速
  • ¥15 服务器安装php5.6版本
  • ¥15 我想用51单片机和数码管做一个从0开始的计数表 我写了一串代码 但是放到单片机里面数码管只闪烁一下然后熄灭
  • ¥20 系统工程中,状态空间模型中状态方程的应用。请猛男来完整讲一下下面所有问题