Я делаю проект, где мне нужно несколько пользовательских компонентов свинга. До сих пор я сделал новую кнопку с серией изображений (внешний вид Java Metal совершенно не соответствует моему интерфейсу). Я реализовал MouseListener
на этом новом компоненте, и именно здесь возникает моя проблема. Мой виджет меняет изображение при наведении на него, щелкает и т. Д., За исключением того, что мой MouseListener
выбирает запись мыши во весь контейнер GridLayout
вместо изображения. Таким образом, у меня есть изображение около 200 * 100, а окружающий контейнер - около 400 * 200, и метод mouseEntered
запускается, когда он входит в эту секцию GridLayout
(даже части пустого пространства) вместо изображения. Как сделать так, чтобы он срабатывал только при наведении курсора на изображение? Я пытался установить размер, границы и другие атрибуты безрезультатно.
РЕДАКТИРОВАТЬ: Вот демонстрация моей проблемы. Как вы можете видеть (вроде цвета очень похожи) нижняя правая кнопка подсвечивается путем ввода ее раздела GridlLayout
. Я хочу, чтобы он был выделен только тогда, когда я закончил, а не раздел GridLayout
.
Я не буду добавлять MouseListener
методы, потому что они просто включают переключение отображаемого изображения.
public customWidget()
{
this.setLayout(new FlowLayout());
try {
imageDef=ImageIO.read(new File("/home/x101/Desktop/buttonDef.png"));
imageClick=ImageIO.read(new File("/home/x101/Desktop/buttonClick.png"));
imageHover=ImageIO.read(new File("/home/x101/Desktop/buttonHover.png"));
current=imageDef;
} catch (IOException e)
{
e.printStackTrace();
}
this.addMouseListener(this);
}
protected void paintComponent(Graphics g)
{
super.paintComponents(g);
g.drawImage(current, 0, 0, current.getWidth(), current.getHeight(), null);
}
РЕДАКТИРОВАТЬ: добавлен раздел кода