Лучший способ кодировать числовую запись пользователя с помощью JButtons?
Я занимаюсь разработкой приложения на Java Swing с цифровой панелью с использованием JButtons. Он имеет цифры от 0 до 9, точку для десятичной дроби и кнопку ввода. Очевидно, что число на кнопке - это просто символ, а не целое число, как я предполагаю.
Я хочу, чтобы пользователь мог нажимать кнопки, чтобы ввести сумму в валюте, например, 25,68 долларов США. Когда они закончат, они нажмут ввод.
Я хочу взять эту сумму и поместить ее в двойную переменную.
В функции actionPerformed я сделаю обычное:
if (e.getSource() == numberButton1){
//put in first index of array
}
Первоначально я думал, что я поместил бы это в массив целых чисел и учел бы кнопку точки, назначая это -1 и ввод как -2. Но как только у меня появятся числа в массиве, они будут в обратном порядке, и я знаю, что могу прочитать их в обратном порядке, посчитав количество элементов и начав с последнего индекса, а затем используя коэффициент 10 в процессе, но все это кажется чрезмерным сложно. Не говоря уже о необходимости учитывать десятичное место. Поэтому, прежде чем я начну писать миллион строк кода, я подумал, что хочу спросить...
... есть ли простой способ сделать это?
3 ответа
Объявите глобальное значение String. Для каждой кнопки с цифрой или точкой (.) Нажмите объединить число или точку со строкой. Затем проанализируйте строку как двойную, когда вам нужно ее использовать. Вот пример:
String value = "";
// Lines of code
if (e.getSource() == numberButton1)
{
value += "1";
}
if (e.getSource() == dotButton)
{
value += ".";
}
// Do the same for other numbers
// When you need the value as a double do the following
double _value = Double.parseDouble(value);
PS: не забудьте добавить проверку, если пользователь нажимает точку дважды. Вы не можете иметь два десятичных знака.
Подумайте над тем, чтобы взглянуть на API действий, оно позволит вам определить автономное действие, которое вы можете настроить любым способом, который вам нравится.
Например...
public class NumberAction extends AbstractAction {
private char value;
private JTextField field;
public NumberAction(char value, JTextField field) {
this.value = value;
this.field = field;
putValue(NAME, Character.toString(value));
}
@Override
public void actionPerformed(ActionEvent e) {
String text = field.getText();
text += value;
field.setText(text);
}
}
Теперь я просто использовал char
в качестве базового значения, поскольку, на самом деле, вы фактически не используете числовые значения любого рода...
Вы бы сконструировали свои кнопки, делая что-то вроде...
JButton num7 = new JButton(new NumberAction('7', field);
JButton num8 = new JButton(new NumberAction('8', field);
JButton num9 = new JButton(new NumberAction('9', field);
//...
Например...
Объединить все входные данные в строку. Затем, нажав кнопку ввода, проанализировать строку как двойную.
Declar
String value ="";
double val =0;
На каждой кнопке
value=value+"3";
А также...
value=value+".";
И так далее.
Затем на кнопку ввода
val =Double.parseDouble(value);
Теперь его двойной нумир... Используйте его