Вопрос

Java использует точку в десятичных дробях, например1/2 = 0.5

Есть ли какой-нибудь способ заставить его использовать запятую вместо этого, как в 1/2 = 0,5?И не использовать запятую для тысяч (как в сто тысяч = 100 000), а вместо этого использовать пробел (100 000)?

Когда дело доходит до вывода, я полагаю, я мог бы использовать все виды функций строкового формата, но проблема заключается в вводе (JTable).Некоторые столбцы требуют двойного формата, поэтому пользователи должны вводить что-то вроде 45,5, а в этих частях они привыкли к 45,5 :) Заранее спасибо

Обновить:

Я попытался использовать myTable.setDefaultLocale(Locale.Германия);но это не сработало.Я также сделал Locale.setDefault(Locale.Германия);@ main функция, и это действительно сработало, но довольно глупым образом:пока ячейка находится в режиме редактирования, вы должны ввести точку как обычно, т.е.45.5 но после вы нажимаете enter, чтобы подтвердить изменения, они отображаются в виде запятой:45,5.Я имею в виду, что он использует запятую только для целей отображения, но при редактировании это все та же старая точка.

Есть ли какой-нибудь способ это исправить без написание пользовательской модели таблицы?

Это было полезно?

Решение

Таким образом, вы в основном хотите преобразовать a локализованный String представление предположительно в числовом формате в Number/BigDecimal и наоборот?

Там у вас есть java.text.DecimalFormat для.Чтобы узнать больше, проконсультируйтесь Собственный учебник Sun о предмете.

Чтобы локализовать ваше приложение Swing, используйте JComponent#setDefaultLocale().Например.

JComponent.setDefaultLocale(Locale.GERMANY);

Другие советы

Взгляните на Форматирование и синтаксический анализ числа для языкового стандарта:

// Format for CANADA locale
Locale locale = Locale.CANADA;
String string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1,234.56

// Format for GERMAN locale
locale = Locale.GERMAN;
string = NumberFormat.getNumberInstance(locale).format(-1234.56); // -1.234,56

// Format for the default locale
string = NumberFormat.getNumberInstance().format(-1234.56);


// Parse a GERMAN number
try {
    Number number = NumberFormat.getNumberInstance(locale.GERMAN).parse("-1.234,56");
    if (number instanceof Long) {
        // Long value
    } else {
        // Double value
    }
} catch (ParseException e) {
}

Чтобы правильно обработать входные данные, вы можете реализовать свою собственную TableModel и перезаписать метод setValueAt.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top