首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在内部呈现图标

在内部呈现图标
EN

Stack Overflow用户
提问于 2018-04-26 20:05:35
回答 1查看 70关注 0票数 1

我正在编写一个Java库以供实践,我想用一个按钮创建一个密码字段,以切换该输入是可见的/不可见的。所有的功能都在那里,但在视觉上有一些问题。

我有一个512x512图标(我能找到的最大大小)保存在与src/文件夹相同的目录级别的res/文件夹中。(我使用IntelliJ作为我的IDE)。当我让图标出现时,它要比JTextField大得多,并且会干扰视图中所有其他组件的大小。

我的问题是如何使图标呈现在正确的大小,尽管图标文件有点高。

代码语言:javascript
复制
package com.carvethsolutions.guilib.fields;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ToggleHiddenTextField extends JPanel {

private JButton toggle;

private HiddenTextField htf;

private boolean hidden;

public ToggleHiddenTextField() {
    htf = new HiddenTextField();
    htf.setBorder(null);
    hidden = true;

    toggle = new JButton(new ImageIcon("./visibility-button.png"));
    toggle.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            if (hidden) {
                htf.showInput();
            } else {
                htf.hideInput();
            }
            hidden = !hidden;
        }
    });

    this.setLayout(new GridLayout(1,2));
    this.add(htf);
    this.add(toggle);
    this.setBorder(BorderFactory.createLoweredBevelBorder());
}

}

这就是它目前的样子。如何确保图标以正确的大小出现?

更新:这段代码是一个可行的结果。我可以从这里调整布局,使之完美。谢谢大家!

代码语言:javascript
复制
package com.carvethsolutions.guilib.fields;

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;

public class ToggleHiddenTextField extends JPanel {

private JButton toggle;

private HiddenTextField htf;

private boolean hidden;

public ToggleHiddenTextField() {
    htf = new HiddenTextField();
    htf.setBorder(null);
    hidden = true;

    try {
        Image image = ImageIO.read(getClass().getResource("/visibility-button.png"));
        image = image.getScaledInstance(htf.getPreferredSize().height, htf.getPreferredSize().height, Image.SCALE_AREA_AVERAGING);
        toggle = new JButton(new ImageIcon(image));
        toggle.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (hidden) {
                    htf.showInput();
                } else {
                    htf.hideInput();
                }
                hidden = !hidden;
            }
        });
    } catch (IOException e) {
        System.out.println("IOException : ");
        e.printStackTrace();
    }

    this.setLayout(new GridLayout(1,2));
    this.add(htf);
    this.add(toggle);
    this.setBorder(BorderFactory.createLoweredBevelBorder());
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-26 20:11:24

  1. 使用ImageIO将文件读取为BufferedImage
  2. 然后你可以缩放图像到你想要的任何大小。这可以通过使用getScaledInstance()的BufferedImage方法来完成。或者,您可以按照您需要的大小创建第二个BufferedImage,然后将第一个图像绘制到缩放图像中。
  3. 使用缩放的图像创建图标。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50051054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档