Изменить цвет JButton при выборе & Установить маску на JFormattedTextField? - PullRequest
1 голос
/ 26 ноября 2010

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

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

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

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

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

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

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

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

Во-первых, никогда не используйте == со строками. Вы ДОЛЖНЫ использовать 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 голос
/ 27 ноября 2010
  1. ActionListener является более распространенным подходом к кнопкам, как описано в Как использовать кнопки и т. Д. .A FocusListener, также используемый в этом примере , - это один из способов изменить внешний вид кнопки так, как вы описываете.

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

...