Java - определенные области компонентов только кликабельны?

Поэтому моя проблема заключается в том, что кликабельны только определенные области некоторых компонентов. У меня есть эти 3 класса:

И вот изображение того, как все это выглядит вместе:

Интерактивные регионы

Но, как вы можете заметить, есть розовые области (я добавил их внутри розовых), а розовые области указывают, где компонент кликабелен. Например, если вы посмотрите на кнопку регистрации, вы можете заметить, что в верхней части кнопки есть розовая область, а это означает, что вы можете нажимать только кнопки в пределах границ розовой области. И вы могли бы также видеть розовую область списка с правой стороны, указывая, что она действует так, как она должна действовать, только если щелкнуть ее в пределах розовой области.

И мой вопрос: почему это так? Я хочу, чтобы он действовал так же, как и любой другой компонент, и мне действительно любопытно, почему он правильно реагирует только в тех определенных регионах. Я рассмотрел возможность того, что некоторые компоненты могут перекрываться, но после рисования границ вокруг каждого отдельного компонента определенно не будет никакого перекрытия.

Если бы кто-нибудь мог помочь мне с моей проблемой и рассказать мне о возможных решениях, это было бы очень признательно, спасибо.

Если у вас есть другие вопросы, не стесняйтесь спрашивать.

Редактировать: я сделал несколько крошечных открытий; Я попытался добавить слушателя мыши к кнопке и распечатать границы кнопки и место, где я нажимаю. Затем я добавил простой оператор if, в котором говорится, что если в границах кнопки содержится точка, в которой я нажимаю, выведите такой оператор, как:

System.out.println(registerButton.getBounds());
System.out.println(e.getPoint());
System.out.println(registerButton.getBounds().contains(e.getPoint()));

Вот пример вывода:

java.awt.Rectangle[x=1,y=115,width=498,height=42]
java.awt.Point[x=383,y=47]
false

И, как вы могли видеть, нет выходного оператора, говорящего, что он находится в границах. И это странно, потому что этот слушатель мыши добавляется только к кнопке регистрации, поэтому он будет срабатывать только при нажатии кнопки регистрации. Но это очень странно, потому что, если вы сравните значения y, глядя на границы кнопки регистрации и точку, в которой вы щелкаете, они сильно различаются. Диапазон значений y, для которого можно нажать кнопку, составляет от 115 до 157. Но значение y, в котором указывается расположение мыши, равно 57, и, конечно, 57 < 115. Таким образом, проблем перекрытия нет, есть только проблема смещения кажется. Кто-нибудь знает, как это исправить?

Примечание: я думаю, что только что заметил что-то; Я добавил слушателя мыши только на панель регистров и только на панель регистров, и щелкнул верхний левый угол панели регистров (ожидая, что он будет 0,0), но когда он распечатал точку, это было (3,30), так что это означает смещение, и из-за этого смещения мышь думает, что находится где-то там, где ее нет, вызывая кликабельность только верхней области. Но теперь, когда я знаю проблему, я понятия не имею, как это исправить. Любые идеи очень приветствуются.

0 ответов

Другие вопросы по тегам