Изменить цвет JButton при выборе & Установить маску на JFormattedTextField?

Я пишу свою первую Java-программу (на Netbeans), и я заблудился. У меня есть 2 вопроса на данный момент, если кто-то достаточно любезен, чтобы помочь мне.

Вот что должна делать программа:

выберите один из 4 вариантов "статуса", плюс 5-значный номер (оба эти элемента вводятся пользователем с помощью монитора с сенсорным экраном), а затем отправьте эту информацию по электронной почте кому-либо с строкой темы: "Элемент № [5-значный" число из JFormattedTextField] в настоящее время [1 из 4 возможных вариантов состояния].

Команда Email отправит команду после того, как пользователь нажмет кнопку "ввод", а затем пользователь нажмет "ОК" во всплывающем окне, которое попросит пользователя подтвердить сообщение, которое должно быть отправлено по электронной почте. Что касается моего 3-го вопроса, он касается части электронной почты, и я подумал, что это будет еще один поток после того, как я проясню этот материал с кнопками и текстовыми полями.

Вот изображение пользовательского интерфейса с сенсорным экраном, которое у меня есть: (не могу публиковать изображения в качестве новичка, перейдите по ссылке krisbunda.com/gui.png для этого изображения)

Вопрос № 1:4 варианта состояния (4 кнопки J) заключены в JPanel. Я хочу, чтобы самая последняя кнопка была нажата в JPanel "statusPanel", чтобы фон был синим, а текст кнопки - белым.

Могу ли я поместить слушатель мыши на родительский JPanel кнопки для прослушивания событий щелчка по дочерним элементам (4 кнопки состояния), а затем, в зависимости от того, какая кнопка была нажата последней, она станет синей с белым текстом? Пожалуйста, укажите мне в правильном направлении.

Вопрос № 2: У меня есть JFormattedTextField с именем "display", который показывает числа при нажатии, которые добавляются из StringBuffer с именем "current". Я хочу, чтобы текстовое поле принимало всего 5 номеров.

Когда я пытался наложить маску "#####" на поле, он прозвучал только в виде предупреждающего звукового сигнала, когда я нажимал кнопки на цифровой клавиатуре. В настоящее время я выбрал "Category: number" и "Format: custom", а затем набрал "#####" в поле "Format:". Это позволяет мне нажимать цифровые кнопки и видеть их текст, но не мешает набирать более 5 символов.

Я делаю это через диалоговое окно "Свойства> FormatterFactory". Снимок экрана показан ниже: (перейдите по ссылке krisbunda.com/text-formatterFactory.png для просмотра этого изображения)

И вот код, который у меня есть до сих пор: (мое сообщение было слишком длинным с этим кодом, поэтому перейдите по ссылке: krisbunda.com/java-sampleCode.txt для просмотра)

Заранее благодарю за любую помощь!

2 ответа

Решение

Ваш код выглядит нормально, и у вас уже есть поля, настроенные для хранения ссылок на все ваши кнопки, так что теперь вам просто нужно написать код внутри кнопок установки статуса, а затем заставить их вызывать подпрограмму с новым статусом. Эта подпрограмма должна затем сбросить все кнопки на их цвет по умолчанию, а затем установить специальный выбранный цвет на кнопке, который соответствует новому или существующему статусу.

Изменить: добавив код здесь в ответ на ваш комментарий...

Во-первых, никогда не используйте == со строками. Вы ДОЛЖНЫ использовать equals() в противном случае, когда вы получите две одинаковые строки, но разные объекты, они не будут одинаковыми, и ваши сравнения потерпят неудачу.

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

// Reset all the buttons
outsideNotReadyButton.setBackground(...);
loadedButton.setBackground(...);
outsideReadyButton.setBackground(...);
shippedButton.setBackground(...);

// Now set the one of the button's colors conditionally
String status = ...

if(status.equals("SHIPPED")) {shippedButton.setBackground(Color.BLUE);}
else if(status.equals("LOADED")) {loadedButton.setBackground(Color.BLUE);}
// ...and so on
  1. ActionListener это более распространенный подход к кнопкам, как описано в разделе Как использовать кнопки и т. д. FocusListener также используется в этом примере, это один из способов изменить внешний вид кнопки, как вы описываете.

  2. Sscce показывает только ваш JFormattedTextField проблема будет более полезной. Несколько таких примеров можно найти в статье Как использовать поля форматированного текста.

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