2016-06-10 241 views
-1

enter image description here如何製作一張JButton的全尺寸圖片?

我加入一個ImageIconJButton但圖像的大小是關閉的。我希望該圖像佔用全部大小的JButton不僅僅是部分,我該如何做到這一點?我附上了正在發生的事情的圖像。

start = new JButton("Start Menu"); 
start.setForeground(Color.WHITE); 

ImageIcon ii = new ImageIcon("C:\\Users\\Bobby\\Desktop\\Ocean.jpg"); 
int scale = 1; 
int width = ii.getIconWidth(); 
int newWidth = width/scale; 
start.setIcon(new ImageIcon(ii.getImage().getScaledInstance(newWidth, -1, 
      java.awt.Image.SCALE_SMOOTH))); 
+0

先從[setMargin(http://docs.oracle.com/javase/8/ docs/api/javax/swing/AbstractButton.html#setMargin-java.awt.Insets-)JButton繼承的方法。 – VGR

回答

2

您的圖像僅限於一個默認JButton的部分,因爲它具有文本和圖標顯示

通過對圖像的頂部覆蓋的文字,圖標將增長到填滿更多的按鈕。

start.setHorizontalTextPosition(JButton.CENTER); 
start.setVerticalTextPosition(JButton.CENTER); 

此時你的圖像將覆蓋大部分JButton的,但會有JButton的四周邊框仍然可見一個潛在的有害部分:這可以通過設置垂直和水平喜好的文本佈局完成。這是由於其限制圖標

的進一步增長進行start.setMargin(new Insets(0,0,0,0));

設置餘量爲0保證金的按鈕看起來應該與此類似:

enter image description here

+0

好看的兄弟!這做了我想要的和更多! –

0

我始終保持我的應用程序中自己的Images類,這可能是我最常用的方法。

public static ImageIcon resizeImageIcon(ImageIcon ii, int width, int height){ 
    ImageIcon imageIcon = new ImageIcon(ii.getImage().getScaledInstance(width, height, Image.SCALE_DEFAULT)); 
    return imageIcon; 
} 

這將重新調整任何現有的ImageIcon的大小。

我也建議您使用可以單擊的JLabel。這主要是爲了避免奇怪的按鈕邊框。如果你喜歡這個,我已經提供了自己的類來處理這個問題。

import java.awt.Cursor; 

import javax.swing.ImageIcon; 
import javax.swing.JLabel; 

public class FClickLabel extends JLabel { 

    public FClickLabel(ImageIcon on, ImageIcon off, ImageIcon press){ 
     this.setIcon(off); 
     this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 
     this.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseEntered(java.awt.event.MouseEvent evt) { 
       setIcon(on); 
      } 

      public void mouseExited(java.awt.event.MouseEvent evt) { 
       setIcon(off); 
      } 

      public void mousePressed(java.awt.event.MouseEvent evt) { 
       setIcon(press); 
      } 

      public void mouseReleased(java.awt.event.MouseEvent evt) { 
       setIcon(off); 
      } 

      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       clickAction(); 
      } 
     }); 
    } 

    public FClickLabel(String text, ImageIcon on, ImageIcon off, ImageIcon press){ 
     this.setIcon(off); 
     this.setText(text); 
     this.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); 
     this.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseEntered(java.awt.event.MouseEvent evt) { 
       setIcon(on); 
      } 

      public void mouseExited(java.awt.event.MouseEvent evt) { 
       setIcon(off); 
      } 

      public void mousePressed(java.awt.event.MouseEvent evt) { 
       setIcon(press); 
      } 

      public void mouseReleased(java.awt.event.MouseEvent evt) { 
       setIcon(off); 
      } 

      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       clickAction(); 
      } 
     }); 
    } 

    public void clickAction() { 

    } 

} 

如果你只想要一個圖像,你可以簡單地提供它3次或刪除改變它並編輯構造函數的代碼。像這樣的例子,我用我的應用程序退出按鈕構建FClickLabel可以覆蓋clickAction()時:

FClickLabel exButton = new FClickLabel(Images.resizeImageIcon(Images.exitOn, 24, 24) 
       ,Images.resizeImageIcon(Images.exitOff, 24, 24) 
       ,Images.resizeImageIcon(Images.exitPress, 24, 24)){ 
      @Override 
      public void clickAction(){ 
       System.exit(0); 
      } 
     };