2016-06-10 3 views
-1

enter image description hereКак сделать картинку в полном размере JButton?

Я добавив ImageIcon к моему JButton, но размер изображения выключен. Я хочу, чтобы Изображение занимало полный размер 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

Start с [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 еще видны вокруг границы , Это связано с краем, который ограничивает дальнейший рост значок

Установив запас до 0 с start.setMargin(new Insets(0,0,0,0));

Кнопка должна выглядеть примерно так:

enter image description here

+0

Хороший брат! Это сделало то, что я хотел и больше! –

0

Я всегда мой собственный класс «Картинки» в моих приложениях, это, возможно, мой самый используемый метод.

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

это изменяет размеры любого существующего изображенияIcon.

Я также предлагаю вам использовать 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); 
      } 
     }; 
Смежные вопросы