CodingForums.com

CodingForums.com (http://www.codingforums.com/index.php)
-   Java and JSP (http://www.codingforums.com/forumdisplay.php?f=54)
-   -   Repaint Not Working (http://www.codingforums.com/showthread.php?t=264908)

Scriptr 06-14-2012 05:01 PM

Repaint Not Working
 
I have the following code for a SpaceInvaders game, and repaint doesn't do anything.

Using System.out.println() for debugging, I have noticed everything works smoothly, but repaint does nothing.

Paint throws an error from the super.graphicsComponent(); if called directly with paint(getGraphics());

Code:

public class Launcher extends JFrame{
       
        private JButton nGame;
        private JButton lGame;
        private String dir = "";
       
        public Launcher(){
                super("Space Invaders");
                setLayout(new FlowLayout(FlowLayout.CENTER));
               
                if(isWindows()){
                        System.out.println("Windows");
                        dir = System.getenv("APPDATA") + "\\.SInvaders\\";
                }
                if(isUnix()){
                        System.out.println("Linux/Unix");
                        dir = "~/SInvaders/";
                }
                if(isMac()){
                        System.out.println("Mac");
                        dir = System.getProperty("user.home") + "/Library/Application Support/SInvaders/";
                }
               
                nGame = new JButton("New Game");
                lGame = new JButton("Load Save");
                File sav = new File(dir+"save.sav");
               
                add(nGame);
                add(lGame);
               
                nGame.addActionListener(new HC(false,dir));
                lGame.addActionListener(new HC(true,dir));
               
                if(!sav.exists()){
                        lGame.setEnabled(false);
                }
               
        }
        //OS Detection functions, isWindows(), isUnix(), isMac()
       
        private class HC implements ActionListener {
               
                boolean load;
                String dir;
                public GameInit g;
                public GameInit g2;
               
                public HC(boolean load, String dir){
                        this.load = load;
                        this.dir = dir;
                }
                @Override
                public void actionPerformed(ActionEvent arg0) {
                        remove(nGame);
                        remove(lGame);
                        repaint();
                       
                        try {
                                //Launch the GameInit
                                g = new GameInit(load,dir);
                               
                                //make it visible
                                add(g);
                                g.setVisible(true);
                                g.setFocusable(true);

                                //give it focus
                                g.requestFocusInWindow();
                                g.requestFocus();

                                //enlarge it to populate the entire JFrame
                                g.setSize(400, 600);
                                g.repaint();

                                //add key listener to JPanel, passing it the character's X coordinate
                                g.addKeyListener(new KL(g.charX));
                        } catch (IOException e) {
                                        // TODO Auto-generated catch block
                                        e.printStackTrace();
                        }
                }
                private class KL implements KeyListener{
                        private int x;
                        public KL(int x){
                                this.x = x;
                        }
                        @Override
                        public void keyPressed(KeyEvent e) {
                                int code = e.getKeyCode();
                                if(code == KeyEvent.VK_LEFT){
                                        if(this.x > 0){
                                                this.x -= 10;
                                                System.out.println(this.x);
                                                new GameInit(this.x);
                                                System.out.println("Left");
                                        }
                                }else if(code == KeyEvent.VK_RIGHT){
                                        if(this.x < 336){
                                                this.x += 10;
                                               
                                                System.out.println("Right");
                                        }
                                }else if(code == KeyEvent.VK_SPACE){
                                        System.out.println("Fire");
                                        fire(g.charX);
                                }
                        }

                        @Override
                        public void keyReleased(KeyEvent e) {
                                // TODO Auto-generated method stub
                               
                        }

                        @Override
                        public void keyTyped(KeyEvent e) {
                                // TODO Auto-generated method stub
                               
                        }
                        public void fire(int x){
                               
                        }
                       
                }
        }
}

Where GameInit is the following:

Code:

public class GameInit extends JPanel{
       
        public int points;
        public int lives;
        public Image heart;
        public Image player;
        public boolean imLoad = false;
        public String dir;
        public int charX = 125;
       
        public GameInit(){
        }
        public GameInit(int x){
                this.charX = x;
                repaint();
        }
        public GameInit(boolean load, String dir) throws IOException{
                if(load){
                        Scanner p = new Scanner(new FileInputStream(dir+"save.sav"));
                        points = Integer.parseInt(p.nextLine());
                        lives = Integer.parseInt(p.nextLine());
                }else{
                        points = 0;
                        lives = 3;
                }
                this.dir = dir;
                loadImages();
        }
        public void loadImages(){
                if((new File(dir+"life.png").exists())){
                        heart = new ImageIcon(dir+"life.png").getImage();
                }else{
                        System.out.println("No File \"" + dir + "life.png\"");
                }
                if((new File(dir+"char.png").exists())){
                        player = new ImageIcon(dir+"char.png").getImage();
                }else{
                        System.out.println("No File \"" + dir + "char.png\"");
                }
               
                if(player != null && heart != null)
                        imLoad = true;
        }
        public void paint(Graphics g) {
                super.paintComponent(g);
                super.setBackground(Color.BLACK);
                if(g instanceof Graphics2D){
                        Graphics2D g2 = (Graphics2D)g;
                       
                        Font def = new Font("Courier New", Font.BOLD, 16);
                        g.setFont(def);
                        g.setColor(Color.WHITE);
                        g.drawString(Integer.toString(points), 10, 568);
                        //g.drawString(Integer.toString(lives), 384, 568);
                        if(imLoad){
                                for(int x = 374; ((400 - x) / 16) <= lives; x = x - 16){
                                        g.drawImage(heart, x, 558, null);
                                }
                                g.drawImage(player, this.charX, 490, null);
                        }else{
                                System.out.println("Could not acquire 1 or more image(s)");
                        }
                }
        }
}



All times are GMT +1. The time now is 04:17 AM.

Powered by vBulletin®
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.