2012-12-10 15 views
6

ボタン全体をカバーし、ボタンの中央に座るようにアイコンのサイズを変更しようとしています。私が試してみると、それは私のボタンを伸ばすと、他のすべてを台無しにする。どうしたらいいですか?現在、私のコードは次のようになります。そのクラス内のクラスの私のコンストラクタでボタンに合わせる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)); 
    } 

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, 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

+0

を[@mreことにより、Q&Aを確認してください](のhttp:/ /stackoverflow.com/search?q=user:584862+[jbutton])、JButtonはLayoutManagerを実装していません – mKorbel

+0

既に試しました。ラベルイメージを追加してボタンに追加しても機能しません。 また、ボタンにborderlayoutを実装しようとしました。まだ動作しません。 – Brandon

+0

画像のサイズを変更する方法に何か問題があると思われます(倍xScale = 28 /幅;倍yScale = 28 /高さ; ...)。この方法では、比率は4:3や16:9など元の比率ではなく1:1になります。 –

答えて

10

(私は括弧を持つ任意のミスをしなかった場合)は、このような何かを試してみてください:

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

この方法で、あなたのイメージは、(サイズ64×64に私の場合には)リサイズと追加されますここで、この例のように、buttonへ:

enter image description here

EDIT:

これはあなたのイメージのサイズを変更すると、画像の比率を維持するための方法である:

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

これは私の仕事:

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); 
     } 
    } 
} 
関連する問題