2014-08-28 2 views
0

Я загрузил изображение в Java, но это похоже, что увеличиваются, как края пошли в образе the imageJava появилось изображение увеличено

the java view

есть то, что загружается я попытался многие методы пытаются его исправить. Я пытаюсь сделать текстовое приключение в стиле Windows 95 в java, все идет хорошо, но проблема загрузки изображения.

Вот код, игнорируйте беспорядок

package com.TTG1.screen; 

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 

import javax.imageio.ImageIO; 
import javax.swing.JFrame; 

public class Game extends JFrame{ 

Image dbImage; 
Graphics dbg; 

double startTime; 
double tempTime; 

Thread thread = new Thread(); 

public Color WIN95GREEN = new Color(33, 135, 99); 

public int WIDTH = 320; 
public int HEIGHT = 240; 
public int SCALE = 2; 

public boolean boot = true; 

BufferedImage bu; 

BufferedImage tb; 

BufferedImage d; 

public Game() { 
    setSize(WIDTH * SCALE, HEIGHT * SCALE); 
    setVisible(true); 
    setBackground(Color.white); 
    setTitle("Swodniw 21"); 
    setResizable(false); 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setLocationRelativeTo(null); 
    setStartTime(); 
    loopTime(); 

} 

public void paint(Graphics g){ 
    dbImage = createImage(getWidth(), getHeight()); 
    dbg = dbImage.getGraphics(); 
    draw(dbg); 
    g.drawImage(dbImage, 0, 0, this); 
} 

public void setStartTime(){ 
    if(boot){ 
    startTime = System.currentTimeMillis(); 
    System.out.println("Time Set!"); 
    } 
} 

public void draw(Graphics g){ 
    if(boot){ 
     try{ 
      bu = ImageIO.read(getClass().getResource("/images/load.png")); 
      d = ImageIO.read(getClass().getResource("/images/desktop.png")); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    g.drawImage(bu, 0, 0, null); 
    } 
    else{ 
     g.drawImage(d, 0, 0, null); 

    } 
    repaint(); 
} 

public static void main(String[] args){ 
    Game game = new Game(); 
} 

public void loopTime(){ 
    while(boot){ 
     System.out.println(tempTime - startTime); 
     tempTime = System.currentTimeMillis(); 
     if(tempTime - startTime > 5000){ 
      boot = false; 
      System.out.print("boot set to false"); 
     } 
    } 
} 

} 
+2

Не нарисовать на раме. Нарисуйте на JPanel (с 'paintComponent' не' paint') и добавьте панель в рамку. Вы находитесь в обрезании, потому что 0,0 относится к самому верхнему левому углу фактического кадра, а не к области содержимого. Также переопределите 'getPreferredSize()' панели и 'pack()' ваш фрейм вместо того, чтобы устанавливать его размер. –

ответ

1

Вы должны сделать два трюка

  • жеребьевку ContentPane, а не к раме непосредственно
  • изменить размер ContentPane и не кадр

    public Game() { 
        setContentPane(new DrawPanel()); 
        getContentPane().setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE)); 
        pack(); 
    
        ... 
        //setSize(WIDTH * SCALE, HEIGHT * SCALE); 
        ... 
    } 
    
    class DrawPanel extends JPanel { 
    
        @Override 
        public void paintComponent(Graphics g) { 
         dbImage = createImage(getWidth(), getHeight()); 
         dbg = dbImage.getGraphics(); 
         draw(dbg); 
         g.drawImage(dbImage, 0, 0, this); 
        } 
    } 
    
+1

[Не используйте 'setPreferredSize()', когда вы действительно хотите переопределить 'getPreferredSize()'] (http://stackoverflow.com/q/7229226/230513). – trashgod

Смежные вопросы