gpt4 book ai didi

java - 在里面渲染一个图标

转载 作者:行者123 更新时间:2023-11-30 06:11:56 27 4
gpt4 key购买 nike

我正在编写一个用于练习的 Java GUI 库,我想创建一个密码字段,其中带有一个按钮来切换该输入可见/不可见。功能齐全,但视觉上存在一些问题。

我有一个 512x512 图标(我能找到的最大尺寸),保存在与 src/文件夹同一目录级别的 res/文件夹中。 (我使用 IntelliJ 作为我的 IDE)。当我显示图标时,它比 JTextField 大得多,并且与 View 上所有其他组件的大小混淆。

我的问题是如何让图标以正确的尺寸呈现,尽管图标文件有点高分辨率。

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());
}

}

enter image description here

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

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

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());
}

}

enter image description here

最佳答案

  1. 使用ImageIO将文件读取为BufferedImage
  2. 然后您可以将图像缩放到您想要的任何尺寸。这可以通过使用 BufferedImage 的 getScaledInstance() 方法来完成。或者,您可以根据需要的大小创建第二个 BufferedImage,然后将第一个图像绘制到缩放后的图像。
  3. 使用缩放后的图像创建图标。

关于java - 在里面渲染一个图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50051054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com