Dimensionar imagem

Galera como faço para diminuir essa imagem dento do java mesmo usei o set bonds mas ele e cortada (ja q diminuo só o label) o set size tb não vai, o que faço?

public class Principal implements MouseListener {

	JFrame j1 = new JFrame();
	public JLabel labelimg ;
	public ImageIcon imI= new ImageIcon(getClass().getResource("/BK.jpg"));
	public ImageIcon imI1= new ImageIcon(getClass().getResource("/BK1.jpg"));
	public ImageIcon imI2= new ImageIcon(getClass().getResource("/BK2.jpg"));
	
	
	
	public Principal() {
		janelas();
	}
	

	public void janelas() {

		j1.setSize(500, 500);
		j1.setLayout(null);
		j1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		j1.setLocationRelativeTo(j1);
		//
		labelimg = new JLabel();
		//labelimg.setSize(100,100);
		labelimg.setBounds(30, 30, 150, 150);
		labelimg.setIcon(imI);
		labelimg.addMouseListener(this);
		j1.add(labelimg);
		//
		j1.setVisible(true);

	}

	public static void main(String[] args) {

		new Principal();
	}

	@Override
	public void mouseClicked(MouseEvent e) {
		labelimg.setIcon(imI1);
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		System.out.println("funcionou");
		
	}

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

	@Override
	public void mouseEntered(MouseEvent e) {
		labelimg.setIcon(imI2);
	
	}

	@Override
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		labelimg.setIcon(imI);
	}
}

Você tem que obter um BufferedImage e chamar o método getScaledInstance.

rsrsr e eu tentando fugir desse tal bufferedImage kkk mas vamos la amanha vou tentar.

brother teria como vc me fazer um exemplo bem simples de inserir imagem usando bufferediamge com uma classe da janela e outra do buffered, sou auto de data em java to aprendendo por tutoriais mas não achei nenhum simples o q achei e voltado para jogos.

E que diferença faz?
Image, é Image.

BufferedImage resizeImage(BufferedImage originalImage, int targetWidth, int targetHeight) throws IOException {
    Image resultingImage = originalImage.getScaledInstance(targetWidth, targetHeight, Image.SCALE_DEFAULT);
    BufferedImage outputImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
    outputImage.getGraphics().drawImage(resultingImage, 0, 0, null);
    return outputImage;
}

sim eenxite x maneiras de serem feitas e eu nao domino isso sei por imagem com Image, image icon inserir el uma Jlabel por exemplo mas nao entendo muito como funciona o bufered image sempre q tendo da algum erro