Search code examples
javaimageswingfullscreen

Java Fullscreen Image resizing?


Hello I am kind of new to java. I am working on a game. when the game starts a loading screen appears and the fades away that's it so far. My question is simple. Is there a way to change the image size to fit the size of the computer screen. I want it to fit all types of screen sizes and be a larger scale of the original image. Here is my Main class so far(there are other classes like player and title and play but they are irrelevant to the question:

package Main;

import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class Comp extends Canvas implements Runnable, KeyListener {

    private static final long serialVersionUID = 1L;    
    public boolean run = true;
    public Image screen, img;    
    public static double dir = 5;
    public static int pixelSize = 1;    
    public static Dimension size = new Dimension(680, 500);
    public static Dimension pixel = new Dimension(size.width / pixelSize,
            size.height / pixelSize);    
    public static int mx;    
    public static manager m;
    public static int my;
    public static int fps;    
    public static boolean mr;    
    public static boolean ml;

    JFrame frame = new JFrame();    
    public Thread t;    
    public boolean splashscreen = true;
    public int time = 0;
    public int timer = 140;    
    public int btime = 0;
    public int btimer = 1;     
    private int FPS = 5;
    private long targetTime = 1000 / FPS;

    public Comp() {
        setPreferredSize(size);
        setFocusable(true);
        addKeyListener(this);    
        addKeyListener(new listen());
        addMouseListener(new listen());
        addMouseMotionListener(new listen());
        addMouseWheelListener(new listen());    
        m = new manager();
        requestFocus();    
        // h = new InputHandler(this);
    }

    public void start() {
        run = true;    
        frame.add(this);    
        frame.pack();
        frame.requestFocus();    
        frame.setTitle("In The Maze");
        frame.setResizable(false);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);    
        frame.setIconImage(new ImageIcon("res/traps/beartrap1.png").getImage());    
        t = new Thread(this);
        t.start();
    }

    public void stop() {
        run = false;    
    }

    public static void main(String[] args) {
        Comp c = new Comp();    
        c.start();
    }

    public void render() {
        BufferStrategy bs = this.getBufferStrategy();
        if (bs == null) {
            createBufferStrategy(2);
            return;
        }
        Graphics g = bs.getDrawGraphics();
        g.setColor(Color.white);
        g.fillRect(0, 0, 1000, 1000);    
        if (!splashscreen) {    
            m.render(g);
        }           
        if(splashscreen){
            ImageIcon i62 = new ImageIcon("res/splashscreen.png");
            img = i62.getImage();
            g.drawImage(img,(int)0 ,(int)0,Comp.size.width+10,Comp.size.height + 10,null);            
            time++;
        }    
        g.dispose();    
        bs.show();
    }

    public void tick() {
        if(time >= timer){
            time = 0;
            splashscreen = false;
        }

        if(!splashscreen){
            m.tick();
        }
        Keys.update();
        Esentials.tick();    
    }

    public void run() {
        screen = createVolatileImage(pixel.width, pixel.height);                
        long start;
        long elapsed;
        long wait;          
        long currentTime = System.currentTimeMillis();          
        while (run) {
            start = System.nanoTime();
            fps++;
            if(System.currentTimeMillis()  - currentTime >= 1000){
            //  System.out.println("fps:" + fps);    
                currentTime = System.currentTimeMillis();
                fps = 0;
            }
            tick();
            render();
            elapsed = System.nanoTime() -start;    
            wait = targetTime = elapsed / 1000000;              
            try {
                Thread.sleep(wait);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public void keyTyped(KeyEvent i) {
    }

    public void keyPressed(KeyEvent i) {
        Keys.keySet(i.getKeyCode(), true);    
    }

    public void keyReleased(KeyEvent i) {
        Keys.keySet(i.getKeyCode(), false);
    }    
}

Solution

  • Try to use Toolkit.getScreenSize()

    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    double width = screenSize.getWidth();
    double height = screenSize.getHeight();
    

    For resizing the image you can use simple imgscalr library

    BufferedImage scaledImage = Scalr.resize(myImage, 100);