有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

摆动Java拉伸图标以适应按钮

我正在尝试调整图标的大小,使其覆盖整个按钮并位于按钮的中心。当我尝试时,它会拉长我的按钮,并把其他一切都弄糟。我怎么做?目前,我的代码是:

在我的类构造函数中

javax.swing.JButton Console = new javax.swing.JButton;
ScaleButtonImage(Console, ConsoleEnabledImage);

在那个班级里

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));
    }

布局:

.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, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(Debug, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(Console, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)

然后我将它们水平和垂直连接起来,使它们大小相同

相反,它最终看起来像下图。此外,如果我更改第一个按钮的图标,所有按钮的大小都会因我的约束而更改。如何使图标与按钮匹配

enter image description here


共 (2) 个答案

  1. # 1 楼答案

    尝试类似的方法(如果我没有在括号中犯任何错误):

    JButton button = new JButton(new ImageIcon(((new ImageIcon(
                "path-to-image").getImage()
                .getScaledInstance(64, 64,
                        java.awt.Image.SCALE_SMOOTH)))));
    

    这样,您的图像将被调整大小(在我的示例中为64x64大小)并添加到button,如下示例所示:

    enter image description here

    编辑:

    这是调整图像大小和保持图像比例的方法:

    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)));
    
  2. # 2 楼答案

    这对我很有用:

    public class ImageButton
    extends JButton {
        private static final long serialVersionUID = 1;
    
        /** @serial */
        private Image image;
    
        /** @serial */
        private final Rectangle innerArea = new Rectangle();
    
        public Image getImage() {
            return image;
        }
    
        public void setImage(Image image) {
            this.image = image;
            repaint();
        }
    
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
    
            if (image != null) {
                SwingUtilities.calculateInnerArea(this, innerArea);
    
                g.drawImage(image,
                    innerArea.x, innerArea.y, innerArea.width, innerArea.height,
                    this);
            }
        }
    }