Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JTable и TableColumn.setCellRenderer / 18 сообщений из 18, страница 1 из 1
04.08.2005, 15:48
    #33202044
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
Дело вот в чем. Последний столбец в таблице сумма, редактируется с помощью JFormattedTextField
Код: plaintext
1.
column.setCellEditor( new  DefaultCellEditor(moneyFormattedTextField));
Редактирует по формату, но при редактировании следующего значения автоматом вставляет в поле прошлое значение. Понимаю из-за чего ошибка, а вто где испраить несоображу.
...
Рейтинг: 0 / 0
04.08.2005, 16:03
    #33202105
GlukOza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
setFocusLostBehavior(JFormattedTextField.PERSIST); - вот такая штука может это делать...
...
Рейтинг: 0 / 0
08.08.2005, 15:32
    #33205962
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
GlukOzasetFocusLostBehavior(JFormattedTextField.PERSIST); - вот такая штука может это делать... Нет такая штука этого не умеет делать.
Перерыл уже весь sun.com, почему неработает JFormattedTextField в CellRenderer
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 JFormattedTextField field1;
     NumberFormat format1 =
           NumberFormat.getInstance();
   field1 =  new  JFormattedTextField(format1);
   field1.setValue( new   Double ( 12 . 34 ));
   field1.setFocusLostBehavior(JFormattedTextField.REVERT);

    column.setCellEditor( new  DefaultCellEditor(field1));
    DefaultTableCellRenderer renderer= new  DefaultTableCellRenderer();
    column.setCellRenderer(renderer);
Т.е. чтоб я не ввел все равно должно быть 12.34. Проект компилится но при редактировании видно что JFormattedTextField не стал CellRenderer'ром. Так же неработает
Код: plaintext
1.
    new  JFormattedTextField( new  DecimalFormat("#,###"));
Может что неправильно делаю?
Заранее спасибо. Блин на такой мелочи туплю....
...
Рейтинг: 0 / 0
08.08.2005, 17:07
    #33206162
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
Ище вопрос немного не в тему.

Кое как редактирую сумму, пытаюсь записать в DBFник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Object rowData[]= new  Object[ 5 ];

rowData[ 0 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 0 ).toString();
rowData[ 1 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 1 ).toString();
rowData[ 2 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 2 ).toString();
rowData[ 3 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 3 ).toString();
rowData[ 4 ]= new   Double (((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 4 ).toString()).doubleValue());
Перед записью просматриваю что пишется в базу, к примеру 123.55, а пишется 123,55. Почему так? Как у дабла выставить сепаратор?
Такая же фигня с ФорматЕдитом в шаблоне стоит "0.00", а копейки даёт вводить только после запятой ','. Буду очень благодарен за помощь.
...
Рейтинг: 0 / 0
08.08.2005, 18:12
    #33206323
GlukOza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
ТимоНИще вопрос немного не в тему.

Кое как редактирую сумму, пытаюсь записать в DBFник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Object rowData[]= new  Object[ 5 ];

rowData[ 0 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 0 ).toString();
rowData[ 1 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 1 ).toString();
rowData[ 2 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 2 ).toString();
rowData[ 3 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 3 ).toString();
rowData[ 4 ]= new   Double (((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 4 ).toString()).doubleValue());
Перед записью просматриваю что пишется в базу, к примеру 123.55, а пишется 123,55. Почему так? Как у дабла выставить сепаратор?
Такая же фигня с ФорматЕдитом в шаблоне стоит "0.00", а копейки даёт вводить только после запятой ','. Буду очень благодарен за помощь.


Я с этим тоже намучилась когда-то.

Можно сделать так:
rowData[4]=new Double(((Vector)accountList.getAccountVector().elementAt(i)).elementAt(4).toString()).trim().replaceAll(",","").doubleValue());
...
Рейтинг: 0 / 0
09.08.2005, 12:36
    #33206554
GlukOza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
Исправила неточность.

rowData[4]=new Double(((Vector)accountList.getAccountVector().elementAt(i)).elementAt(4).toString().trim().replaceAll(",",".")).doubleValue());[/quot]
...
Рейтинг: 0 / 0
10.08.2005, 11:02
    #33207992
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
На счет JFormattedTextField (если кому интересно) все оказывается намного проще:
создаем формат десятичных символов
Код: plaintext
1.
2.
 DecimalFormatSymbols formatSymbols =  new  DecimalFormatSymbols();
//вот и сепаратор
    formatSymbols.setDecimalSeparator('.');
затем формат десятичных и целых
Код: plaintext
1.
2.
3.
4.
DecimalFormat decimalFormat =  new  DecimalFormat("#0.00",formatSymbols);
    NumberFormatter numberFormatter =  new  NumberFormatter(decimalFormat);

    numberFormatter.setOverwriteMode(true);
    numberFormatter.setAllowsInvalid(false);

и все создаем филд
Код: plaintext
JFormattedTextField moneyFormattedTextField=  new  JFormattedTextField(numberFormatter);
Работает все отлично.

to GlukOza
Ваш код ведь небудет работать :)
Нельзя присваивать Object'у double это ведь не класс, а вот если Double оболочку то работать будет, но проблемма с запятой нерешится.
...
Рейтинг: 0 / 0
10.08.2005, 14:37
    #33208367
GlukOza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
За JFormattedTextField и проблему с форматом десятичных символов спасибо.

double suma = Double.parseDouble(SumaS.getText().trim().replaceAll(",","")); - у меня работет.
...
Рейтинг: 0 / 0
10.08.2005, 15:33
    #33208446
GlukOza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
[quot ТимоН]На счет JFormattedTextField (если кому интересно) все оказывается намного проще:
создаем формат десятичных символов
Код: plaintext
1.
2.
 DecimalFormatSymbols formatSymbols =  new  DecimalFormatSymbols();
//вот и сепаратор
    formatSymbols.setDecimalSeparator('.');
затем формат десятичных и целых
Код: plaintext
1.
2.
3.
4.
DecimalFormat decimalFormat =  new  DecimalFormat("#0.00",formatSymbols);
    NumberFormatter numberFormatter =  new  NumberFormatter(decimalFormat);

    numberFormatter.setOverwriteMode(true);
    numberFormatter.setAllowsInvalid(false);

и все создаем филд
Код: plaintext
JFormattedTextField moneyFormattedTextField=  new  JFormattedTextField(numberFormatter);


Попробывала. Действительно работает замечательно.
Только не пойму, почему привводе чисел, выскакивает дополнительные два нуля. Их постоянно надо вытирать?
...
Рейтинг: 0 / 0
10.08.2005, 15:42
    #33208474
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
А чер его знает. Можно просто точку поставить он их сам (всмысле филд) уберет.
А как же всетаки записать Double с правильным сепаратором?
...
Рейтинг: 0 / 0
10.08.2005, 15:46
    #33208485
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
Первый пост неувидел :)
Немогу я записывать double в dbf.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 public   void  addRecord(java.lang.Object[] values)
                throws  JDBFException

    Writes a record to the DBF file.

    Parameters:
        values - an array of values that represent the  new  record.

Выложите плиз часть вашего кода записи в дбф.
...
Рейтинг: 0 / 0
10.08.2005, 16:04
    #33208532
GlukOza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
Выложите плиз часть вашего кода записи в дбф.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
// Вот так у меня создается полечко
 private   void  setUpSumaMR()
    {
        NumberFormat formatSumaMR;
        formatSumaMR = NumberFormat.getInstance(Locale.UK);
        formatSumaMR.setMinimumFractionDigits( 1 );
        formatSumaMR.setMaximumFractionDigits( 2 );
        fltSumaMR =  new  JFormattedTextField(formatSumaMR);
        fltSumaMR.setValue( new   Double ( 0 . 00 ));
        fltSumaMR.setFocusLostBehavior(JFormattedTextField.COMMIT_OR_REVERT);
    }

// Вот так считывается
 double  sumaMRField     =  Double .parseDouble(fltSumaMR.getText().trim().replaceAll(",",""));

//Вот так выполняется запрос
sql = "INSERT INTO RAS (UCRA) VALUES (sumaMRField)";
 int  rr = statement.executeUpdate(sql);

Поле в таблице N( 9 , 2 ). Таблица оракл.



// А вот кусчек, если работаю с моделью таблички

 public   void  updat( int  rowzm)
{
    String kom="";
     try 
    {
        columnTypes = model.getColumnTypes();
        sql = "update " + tableName + " set ";

         for  ( int  col= 0 ; col < model.getColumnCount(); col++)
        {
            colName = model.getColumnNamesEng()[col].toString();
             if (colName.equals("ROWID"))
            {
                  cRowId = model.getValueAt(rowzm,col).toString();
                  entry="";
                   continue ;
            }
             if (colName.equals("PVRA") || colName.equals("USRA"))
            {
                  entry="";
                   continue ;
            }
            entry = (String)model.getValueAt(rowzm,col);
             int  len = sql.length();
             if  (len== 19 )
            {
                  kom="";
            }
             else  kom=", ";
             if  (model.getColumnNamesEng()[col].equals("DZRA"))
            {
                  sql = sql + kom + model.getColumnNamesEng()[col] + "= to_date('"+ entry+"','dd.mm.yyyy','nls_date_language=UKRAINIAN')";
            }
             else 
            {
                    switch (columnTypes[col])
                   {
                         case   2  :
                        {
                             if ( entry ==  null  || entry.equals(""))
                            {
                                sql = sql + kom + model.getColumnNamesEng()[col] + "= 0";
                            }
                             else 
                            {
                                 if (entry.indexOf(".") == - 1 )
                                {
                                    sql = sql + kom + model.getColumnNamesEng()[col] + "=" + Integer.parseInt(entry);
                                }
                                 else 
                                {
                                    sql = sql + kom + model.getColumnNamesEng()[col] + "=" +  Float .parseFloat(entry);
                                }
                            }
                         }
                          break ; //number
                          case   12  :
                         {
                              if (entry ==  null  || entry == "")
                             {
                                 sql = sql + kom + model.getColumnNamesEng()[col] + "= ''";
                             }
                              else 
                             {
                                 sql =""+ sql + kom + model.getColumnNamesEng()[col] + "='"+ entry + "'";
                             }
                          }
                           break ; //varchar2
                           default : {System.out.println("Не определено!!!-<br>"+columnTypes[col]+"<br>");}
                   }
                }
            }
            sql = sql + " where ROWID = ('" + cRowId + "')";
            System.out.println(sql);
             if  (connect ==  null  || statement ==  null )
            {
                connect = results.getConnection();
                statement = connect.createStatement();
            }
             int  rr = statement.executeUpdate(sql);
            JOptionPane.showMessageDialog( null ,"<html><p align='center'><b><font color='2655' " +
            "face='Verdana'> Змінено рядок :</font></b></p><p align='center'><font face='Verdana'> "+rowzm+"</font></p>"
            ," Збереження змін ", JOptionPane.INFORMATION_MESSAGE);

    }
     catch  (SQLException el)
    {
        System.out.println(el.getErrorCode());
        System.out.println(el.getNextException());
        System.out.println(el.getSQLState());
        System.out.println(el.fillInStackTrace());
        System.out.println(el.getMessage());
        JOptionPane.showMessageDialog( null ,"Ошибка обновления записей в БД !", "Сохранение изменений!",JOptionPane.ERROR_MESSAGE);
    }
     catch (Exception e)
    {
        System.out.println(e.fillInStackTrace());
        System.out.println(e.getStackTrace());
        System.out.println(e.getMessage());
        JOptionPane.showMessageDialog( null ,"Не получилось сделать изменения!","Ошибка!",JOptionPane.ERROR_MESSAGE);
    }
}

Пользуйтесь, пожалуйста, кнопкой SRC для оформления кода.
...
Рейтинг: 0 / 0
10.08.2005, 16:41
    #33208661
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
Вы наверное неправильно поняли я использую com.svcon.jdbf.* для записи, чтения из dbf фйла о SQL вообще речи неидет. В этом пакете реализована физическая запись и чтение. К примеру запись:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 fields[ 0 ] =  new  JDBField("NUM",'C', 20 , 0 );
      fields[ 1 ] =  new  JDBField("FAM",'C', 25 , 0 );
      fields[ 2 ] =  new  JDBField("NAME",'C', 13 , 0 );
      fields[ 3 ] =  new  JDBField("PAT",'C', 17 , 0 );
      fields[ 4 ] =  new  JDBField("SUMMA",'N', 14 , 2 );

DBFWriter dbf= new  DBFWriter(fileName.toString(),fields, new  String("CP866"));

 Object rowData[]= new  Object[ 5 ];

     rowData[ 0 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 0 ).toString();
     rowData[ 1 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 1 ).toString();
     rowData[ 2 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 2 ).toString();
     rowData[ 3 ]=((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 3 ).toString();
     rowData[ 4 ]=  Double .valueOf(((Vector)accountList.getAccountVector().elementAt(i)).elementAt( 4 ).toString());
dbf.addRecord(rowData);
 dbf.close();
Вот такие пироги. Может кто работал с этим пакетом?
...
Рейтинг: 0 / 0
10.08.2005, 16:51
    #33208703
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
К стати замените строчку
Код: plaintext
1.
// Вот так считывается
 double  sumaMRField     =  Double .parseDouble(fltSumaMR.getText().trim().replaceAll(",",""));
на
Код: plaintext
1.
// Вот так считывается
 double  sumaMRField=  new   Double (fltSumaMR.getValue);
Будет замечательно работать и без парсинга.
...
Рейтинг: 0 / 0
10.08.2005, 17:22
    #33208833
GlukOza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
ТимоНК стати замените строчку
Код: plaintext
1.
// Вот так считывается
 double  sumaMRField     =  Double .parseDouble(fltSumaMR.getText().trim().replaceAll(",",""));
на
Код: plaintext
1.
// Вот так считывается
 double  sumaMRField=  new   Double (fltSumaMR.getValue);
Будет замечательно работать и без парсинга.

Ок.
...
Рейтинг: 0 / 0
11.08.2005, 11:55
    #33210031
ТимоН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
Что никто с этим пакетом неработал? Ну непишет он сволочь точку, как разделитель у дабла. Все уже перепробовал. Есть какие нибудь мысли?
Спасибо.
...
Рейтинг: 0 / 0
23.08.2005, 18:45
    #33230700
slavic
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
locale?

Formaters use locale
...
Рейтинг: 0 / 0
08.11.2005, 10:44
    #33365762
beo
beo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTable и TableColumn.setCellRenderer
2ТИМОН: Ну я работал :)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JTable и TableColumn.setCellRenderer / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]