2010-01-16 2 views
4

Java использует период в десятичных знаках, например. 1/2 = 0,5Форматирование номера локализации Java

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

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

Update:

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

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

ответ

2

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

У вас есть java.text.DecimalFormat для. Чтобы узнать больше, проконсультируйтесь с Sun's own tutorial по этому вопросу.

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

JComponent.setDefaultLocale(Locale.GERMANY); 
+0

Проблема с этим решением заключается в том, что мой столбец таблицы принимает только двойные значения, а Double Java-style означает форматирование чисел в США и Канаде. Я могу заставить его принимать String вместо Double, а затем анализировать/проверять его вручную, но нет ли более простого решения? Что-то вроде SetGlobalLocale (Locale.German); и вдруг Java знает, что 12,20 является допустимым двойным значением, поэтому мне не нужно ничего менять в моей таблице ... что-то в этом роде? :) – Sejanus

+0

Вижу, вы используете Swing. Я обновил свой ответ (и теги этого вопроса). – BalusC

+0

Большое спасибо, я считаю, что это то, что мне нужно! Пока у меня это работало, что-то гораздо лучше, чем ничего, но что-то еще не совсем правильно. Я обновил оригинальный вопрос, если у вас есть время, чтобы посмотреть на него – Sejanus

5

Взгляните на Formatting and Parsing a Number for a Locale:

// 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) { 
} 
1

Для правильной обработки ввода вы можете реализовать свою собственную таблицуModel и перезаписать метод setValueAt.

 Смежные вопросы

  • Нет связанных вопросов^_^