I have been able to make fonts scale with the size of the component, however, I cant seem to figure out how to make an image scale. The way my program works is the components are added to an arrayList and then at the end the bounds for each of the components are set. I tried variations of this and have been unable to get it to work:
public class ImagePanel extends JPanel implements Updater{
BufferedImage resizer;
private int width;
private int height;
private JLabel picLabel;
private BufferedImage myPicture;
/**
* Searches for the image in the specified location and sets the background of the ImagePanel to the specified color.
* @param location
* @param bGColor
*/
public ImagePanel(String location, Color bGColor)
{
myPicture = null;
this.setLayout(new BorderLayout());
try {
// TODO make it use the string.
myPicture = ImageIO.read(new File("images/logo-actavis.png"));
} catch (IOException e) {
e.printStackTrace();
}
picLabel = new JLabel(new ImageIcon(myPicture));
add(picLabel,BorderLayout.CENTER);
this.addComponentListener(new ComponentAdapter() {
@Override
/**
* Makes it so it does not stretch out text. Resizes the fonts to scale with the screen width..
*/
public void componentResized(ComponentEvent e) {
if(picLabel.getHeight()!=0&&picLabel.getWidth()!=0)
{
width = picLabel.getWidth();
height = picLabel.getHeight();
myPicture=resize(myPicture, width, height);
}
}
});
this.setBackground(bGColor);
}
public static BufferedImage resize(BufferedImage image, int width, int height) {
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TRANSLUCENT);
Graphics2D g2d = (Graphics2D) bi.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
g2d.drawImage(image, 0, 0, width, height, null);
g2d.dispose();
return bi;
}
}
You can use the method to get scaled image from the original one
public Image getScaledInstance(int width, int height, int hints)