Java Swing полностью закругленный JButton (окружность вне области не может быть нажата или видима) - PullRequest
3 голосов
/ 08 октября 2011

Я пытался реализовать полностью свободный интерфейс JButton:

  • Свободная форма в виде границы, решение приведено в предыдущем потоке: Jound, закругленный Swing с использованием Java
  • Но на внешнюю область нельзя щелкнуть
  • И форма вне области не отрисовывается даже родительским классом (JButton)

Есть ли простой способ сделать это в "обычном" Swing (без какой-либо сторонней библиотеки)? Иначе, есть ли хорошая бесплатная (с открытым исходным кодом, конечно, лучше) библиотека для 3d вечеринок, чтобы сделать это?

В качестве примера, подумайте о шаре Красного круга: лучшее взаимодействие, которое я могу дать пользователям, это то, что он не может щелкать снаружи, особенно если шар действительно большой.

Заранее спасибо

(Я подумал о компоненте, написанном с нуля с помощью Java2D, и использую метод Shape contains (), чтобы проверить, хорош ли щелчок. Но у меня было бы две основные проблемы:

  • для придания пресс-формы Shape, а также для JButton => как меня заметили ниже, это не самое сложное, если я использую два разных рисунка / изображения

  • для обработки событий (ActionListeners) так же, как это делает JButton => если я наследую от JComponent, самым трудным будет отклонить (вернуться из) обработку, если мы не нажали в хорошей области => Каков наилучший способ обнаружить это возможное пересечение между точкой щелчка мыши и областью?)

1 Ответ

4 голосов
/ 08 октября 2011

у вас есть три варианта

1) каждый пользовательский Look and Feels имеет орудия Rounded JComponents, это самый безопасный способ, как сделать это с пользой и, возможно, правильно, часть из них дает превосходный вывод на Java Swing GUI и с длинными Bug история, я бы предложил использовать Substance Look & Feel, но очень, очень чувствителен к EDT

2) вы можете переопределить целое (Пользовательский Look and Feels уже сделал это) ButtonUI , но ваш UI_Delegate будет чувствителен к Look and Feel и Native_OS, что означает пример, по которому я публикую ссылку, работает на Windows платформе с Metal Look and Feel, если вы хотите создать крестик Platform и крестик Look & Feel без учета чувствительности, то вы должны преодолеть все возможные Platforms и Look and Feels

3) создать JComponent с помощью Rounded Borders, заполнить область внутри, например, GradientPaint, а затем добавить MouseListener, MouseMotionListener, KeyListener или лучше написать собственный KeyBindings и создать собственный Model во избежание совпадения между подкладкой Listeners, тогда будет ваш Custom JButton крест Platform и крест Look & Feel нечувствительный

все .... до вас, много удачи

...