如何将照片制作成JButton的全尺寸?

时间:2016-06-10 16:18:44

标签: java swing jbutton imageicon

enter image description here

我正在向a[data-toggle] { cursor: pointer; } 添加ImageIcon,但图片的大小已关闭。我希望Image不仅可以占用JButton的全部大小,我该如何实现?我附上了正在发生的事情的图像。

JButton

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
            }
        };