Java stretch icon fit button
I'm trying to resize my icon so that it covers the entire button and is in the center of the button When I try, it stretches my button and messes up everything else What shall I do? At present, my code is:
In the constructor of my class
javax.swing.JButton Console = new javax.swing.JButton; ScaleButtonImage(Console,ConsoleEnabledImage);
In that class
private void ScaleButtonImage(javax.swing.JButton Button,java.awt.Image ButtonIcon) { double Width = ButtonIcon.getWidth(Button); double Height = ButtonIcon.getHeight(Button); double xScale = 28/Width;//Button.getWidth() / Width; double yScale = 28/Height;//Button.getHeight() / Height; double Scale = Math.min(xScale,yScale); //ToFit //double Scale = Math.max(xScale,yScale); //ToFill java.awt.Image scaled = ButtonIcon.getScaledInstance((int)(Scale * Width),(int)(Scale * Height),java.awt.Image.SCALE_SMOOTH); Button.setIcon(new javax.swing.ImageIcon(scaled)); }
Layout:
.addGroup(layout.createSequentialGroup() .addComponent(Enable,javax.swing.GroupLayout.PREFERRED_SIZE,28,javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Graphics,javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Debug,javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(Console,javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)
Then I connect them all horizontally and vertically so that they are all the same size
Instead, it eventually looks like the following In addition, if I change the icon of the first button, all buttons will change size due to my constraints How do I fit icons to buttons?
Solution
Try something like this (if I'm not wrong with parentheses):
JButton button = new JButton(new ImageIcon(((new ImageIcon( "path-to-image").getImage() .getScaledInstance(64,64,java.awt.Image.SCALE_SMOOTH)))));
In this way, your image will be resized (in my example, the size is 64) × 64) and add to the button, as shown in the following example:
Edit:
This is a way to resize and maintain the image scale:
ImageIcon ii = new ImageIcon("path-to-image"); int scale = 2; // 2 times smaller int width = ii.getIconWidth(); int newWidth = width / scale; yourComponent.setIcon(new ImageIcon(ii.getImage().getScaledInstance(newWidth,-1,java.awt.Image.SCALE_SMOOTH)));