LINUX.ORG.RU

JavaFX Button

 , ,


0

1

Всем привет! Возник такой вопрос. Есть у меня панель с кнопками, на UI. Хочу реализовать такую штуку, чтобы по нажатию на нее появлялось меню(рядом). А при повторном нажатии на нее меню исчезало. Реализовал панель с кнопками через HBox, туда добавил все, повесил EventHandler-ы. Вопрос вот в чем, как отследить, что кнопка уже была нажата?Т.е нужен какой-то счетчик наверное, каждое второе нажатие - убирает меню, остальные - его добавляют. Либо мой второй вариант это создать новый класс кнопки, отнаследоваться от него и добавить атрибут boolean active = false; При нажатии проверять, этот флаг. Но ради флага городить такие костыли.. В общем, подкиньте, пжлст, идею, ребяты!

ппц, при нажатии

menu.setVisible(!menu.isVisible())

и все, но в свинге это не работало - там меню скрывалось при потере фокуса, поэтому при нажатии кнопки оно «мигало». С другой стороны если ткунть в любое другое место то меню скрывалось - а кнопка с флагом (твой вариант) есесно ничего не показывало

subwoofer ★★★★★ ()
Ответ на: комментарий от subwoofer

Это я делал, именно так, как ты написал. Но при такой реализации у меня при скрытии меню(т.е при setVisible()) меню пропадает, но то место, которое оно занимало, остается. Ну т.е:

[button menu] При скрытии:

[button ______ ]

Вот поэтому я решил вести счетчик и добавлять/удалять объект меню. А не добавить его и делать видимым/не видимым.. Хотя наверное так делать люто не верно..

aarexer ()
Последнее исправление: aarexer (всего исправлений: 1)
Ответ на: комментарий от subwoofer

Да нет же, уважаемый сэр! Я просто не правильно сформулировал мысль. Смотри, у меня есть HBox, там кнопки. Назовем его buttonsBox; Есть еще один HBox, boxMen, в него входит buttonsBox, и, например, ListView какой-нибудь. Теперь, я делаю:

boxMen.addAll(buttonsBox, listView);
У меня отображается панель кнопок и лист мой. После этого я при нажатии на кнопку хочу скрыть listView, оставив только панель кнопок. Делая setVisible(false) у listView я его скрываю, но то место в пикселях, что он занимал на экране - остается. Т.е у меня получается панель кнопок и пустое пространство. Мне надо это пустое пространство убрать, оно мешает другим элементам отображаться. Понимаешь? Вот я и не пойму как сделать это..

aarexer ()
Ответ на: комментарий от aarexer

faceplam, тогда в листенере событий нажатия кнопки заведи поле где хранится ссылка на твой компонент и грохай\добавляй его

другой вариант - заюзать layout (обычно надо такое писать руками) который убирает место от невидимых компонентов

subwoofer ★★★★★ ()

чтобы по нажатию на нее появлялось меню(рядом). А при повторном нажатии на нее меню исчезало

Плохая, очень плохая штука. Неужели нет другого варианта?

buddhist ★★★★★ ()
Ответ на: комментарий от buddhist

Я буду только рад, если вы предложите что-то более приятное) Суть вот в чем, основную часть окна занимает глобус земли, а по краям я хотел сделать всякие таблички, дополнительную информацию в общем! Соответственно, чтобы место освобождать(например, нам не нужен вон тот список и табличка сейчас) мы можем ее скрыть/убрать. Как понадобиться - снова открыть.. У меня мало опыта написания GUI, поэтому я буду рад критике и советам! Да и вообще я рад критике)

aarexer ()
Ответ на: комментарий от aarexer

дополнительную информацию в общем!

DockBar'ы, если они есть в JavaFX. В Qt вот есть. Идеальное решение для твоего случая. Ну или вкладки на TabWidget'е. Кнопками это вообще костыльно как-то.

EXL ★★★★★ ()
Ответ на: комментарий от EXL

TabWidget решение мне не очень нравится ибо не слишком гибко, имхо. Я сделал как в idea, там тоже кнопками все или хоткеями, оттуда я мысль взял. А вот про DockBar надо посмотреть..

aarexer ()
Ответ на: комментарий от aarexer

Просто я когда-то пытался сделать гуй с чем-то подобным тому, что ты описал в ОП, получился кошмар.

buddhist ★★★★★ ()
Ответ на: комментарий от aarexer

гуй на жабе действительно кошмар

anonymous ()
Ответ на: комментарий от anonymous

а на чем не кошмар?Гуй всегда кошмар, много сил вкладывается, но мало профита.

aarexer ()
Ответ на: комментарий от aarexer

но то место в пикселях, что он занимал на экране - остается. Т.е у меня получается панель кнопок и пустое пространство

А что на его место должно появиться? или вместо пустого пространства?

Karapuz ★★★★★ ()
Ответ на: комментарий от Karapuz

Когда мы все панельки отключаем, то должно просто освободиться место и должен расшириться глобус на все оставшиеся пространства. Глобус в StackPane-е. Т.е StackPane должен все занять место.

aarexer ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.