Я пишу библиотеку Java GUI для практики, и я хочу создать поле пароля с кнопкой, чтобы переключать этот ввод, чтобы он был видимым / невидимым. Функциональность все есть, но визуально есть некоторые проблемы.
У меня есть значок 512x512 (самый большой размер, который я смог найти), находящийся в папке res / на том же уровне каталогов, что и папка src /. (Я использую IntelliJ в качестве моей IDE). Когда я получаю значок, он появляется на FAR больше, чем JTextField, и портится с размерами всех других компонентов в представлении.
У меня вопрос, как мне сделать так, чтобы значок отображался в правильном размере, несмотря на то, что файл значка был в высоком разрешении.
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](https://i.stack.imgur.com/piq6I.png)
Вот как это выглядит в настоящее время. Как я могу убедиться, что значок отображается и имеет правильный размер?
UPDATE:
Этот код получить работоспособный результат. Я могу настроить макет отсюда, чтобы сделать его идеальным. Спасибо всем!
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](https://i.stack.imgur.com/W16Yr.png)