Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JComboBox in JTable / 11 сообщений из 11, страница 1 из 1
18.04.2005, 13:55
    #33021058
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JComboBox in JTable
Всем добрый день.Есть таблица,которая расширяет AbstractTableModel.
Мне нужно вставить JComboBox в один из столбцов этой таблицы,как это сделать?
Делаю так
Код: plaintext
1.
2.
3.
TableColumnModel tcm=jTable1.getColumnModel();
       TableColumn tc=tcm.getColumn( 2 );
       tc.setCellRenderer( new  Render());
.....
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 public   class  Render  extends  JComboBox  implements  TableCellRenderer {
   public  Render() {
     super ();
    add.Item( 1 );
    add.Item( 2 );
    add.Item( 3 );
  }
   public  Component getTableCellRendererComponent(JTable table, Object value,  boolean  isSelected,  boolean  hasFocus,  int  row,  int  column) {
      if (isSelected){
       this .setForeground(table.getSelectionForeground());
       super .setBackground(table.getSelectionBackground());
           }
       else {
         this .setForeground(table.getForeground());
         super .setBackground(table.getBackground());
      }
         this .setSelectedIndex(row);
      return   this ;
  }
}
Короче когда сделал так,комбобокс появился,но он не раскрывается,а мне нужно чтобы он раскрывался,для того чтобы у пользователя имелась возможность менять значения ячейки таблицы,причем чтобы после изменения это все автоматом заносилось в базу.
Спасибо
Как это все работает фиг его знает,может кто-то пояснит последовательность действий.
...
Рейтинг: 0 / 0
18.04.2005, 14:13
    #33021121
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JComboBox in JTable
написать собс. класс, расширяющий AbstractTableModel,
в методе
setValueAt(Object value, int row, int col) {}
отправлять изменения
Если комбо не доступен, то в методе
public boolean isCellEditable(int row, int col) {} на номер столбца возвращать тру
...
Рейтинг: 0 / 0
18.04.2005, 15:05
    #33021312
Евгений Путилин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JComboBox in JTable
peter6636
Код: plaintext
1.
2.
3.
TableColumnModel tcm=jTable1.getColumnModel();
       TableColumn tc=tcm.getColumn( 2 );
       tc.setCellEditor( new  DefaultCellEditor(myComboBox));
.....
Как это все работает фиг его знает,может кто-то пояснит последовательность действий.
Тебе надо не render изменять а Editor.
...
Рейтинг: 0 / 0
18.04.2005, 16:37
    #33021602
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JComboBox in JTable
Так мне это все делать в модели AbstractTableModel или в классе реализующем интерфейс TableСellEditor.
Если в TableСellEditor,тогда как таблица будет знать что в ячейке новое заначение появилось,че-то я запутался.
...
Рейтинг: 0 / 0
18.04.2005, 16:46
    #33021623
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JComboBox in JTable
peter6636Так мне это все делать в модели AbstractTableModel или в классе реализующем интерфейс TableСellEditor.
Если в TableСellEditor,тогда как таблица будет знать что в ячейке новое заначение появилось,че-то я запутался.
TableСellEditor назначается на столбец. AbstractTableModel - для всей таблицы.

TableColumnModel tcm=jTable1.getColumnModel();
TableColumn tc=tcm.getColumn(2);
tc.setCellEditor(new DefaultCellEditor(myComboBox));
для столбца, чтобы вместо ячейки отображался комбобокс

class MyTableModel extends AbstractTableModel {...}
MyTableModel myModel = new MyTableModel();
JTable table = new JTable(myModel);
модель, чтобы отлавливать изменения в таблице, в тч и комбобокса

Ну я так по крайней мере делаю.
...
Рейтинг: 0 / 0
18.04.2005, 17:03
    #33021663
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JComboBox in JTable
adf peter6636Так мне это все делать в модели AbstractTableModel или в классе реализующем интерфейс TableСellEditor.
Если в TableСellEditor,тогда как таблица будет знать что в ячейке новое заначение появилось,че-то я запутался.
TableСellEditor назначается на столбец. AbstractTableModel - для всей таблицы.

TableColumnModel tcm=jTable1.getColumnModel();
TableColumn tc=tcm.getColumn(2);
tc.setCellEditor(new DefaultCellEditor(myComboBox));
для столбца, чтобы вместо ячейки отображался комбобокс

class MyTableModel extends AbstractTableModel {...}
MyTableModel myModel = new MyTableModel();
JTable table = new JTable(myModel);
модель, чтобы отлавливать изменения в таблице, в тч и комбобокса

Ну я так по крайней мере делаю.
Я это уже все давно сделал,у меня нифига не работает,ячейка не редактируется,хотя в сэтВалуэ возвращает тру
...
Рейтинг: 0 / 0
18.04.2005, 18:11
    #33021814
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JComboBox in JTable
A в setValueAt(){}
че делаешь?
...
Рейтинг: 0 / 0
18.04.2005, 18:49
    #33021913
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JComboBox in JTable
Короче сделал так:
Код: plaintext
1.
2.
3.
 TableColumnModel tcm=jTable1.getColumnModel();
      TableColumn tc=tcm.getColumn( 2 );
      tc.setCellEditor( new  DefaultCellEditor(jComboBox2));
...
Код: plaintext
1.
2.
 private  String[] data={"Державіаслужба","Держфлотінспекція","Укрморрічфлот","Укравтодор","Головна гос. інспекція","Охрана МТУ","Укрсервіс","Медцентр МТУ","Проф. комітет МТУ"};
jComboBox2=  new  JComboBox(data);
Запускаю прогу,выводится таблица,перехожу на столбей номер 2 чтобы поменять значение,клацаю на ячейке,список со всеми значениями не открылся,но значение в ячейке поменял на "Державіаслужба",т.е. на первый элемент в jComboBox2.
Чтобы было еще яснее покажу исходную и результирующую таблицу
Исходная:
...
Рейтинг: 0 / 0
18.04.2005, 18:51
    #33021916
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JComboBox in JTable
Вот результирующая:
...
Рейтинг: 0 / 0
18.04.2005, 18:59
    #33021932
peter6636
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JComboBox in JTable
Теперь про метод setValueAt.
Код: plaintext
1.
2.
3.
4.
5.
6.
 public   void  setValueAt(Object value,  int  row,  int  column){
          try {
       valueSET(t,value,row,column);
         } catch (Exception t){
           System.out.println("че-то с колличеством колонок");
         }
       }
....
Код: plaintext
1.
2.
3.
4.
5.
 public   void  valueSET( int  kol,Object value, int  row, int  column){
   //тут у меня собирается запрос
String columnName = cn[column];
query="update aviatrans set "+columnName+"="+"'"+dbRepresentation(column, value)+"'"+" where id_zajavki="+dbRepresentation( 0 , getValueAt(row,  0 ));
}
....
И вот тут похоже где-то гемор,но не могу понять где
Код: 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.
   public  String dbRepresentation( int  column, Object value) {
                              try {
                                  System.out.println("in representation");
                                   int  type;
                                        if  (value ==  null ) {
                                            return  "null";
                                       }
                                        try  {
                                           type = metadata.getColumnType(column+ 1 );
                                       System.out.println("type="+type);
                                       }
                                        catch  (SQLException e) {
                                          System.out.println("Exc e="+e.toString());
                                        return  value.toString();
                                       }

                                        switch (type) {
                                        case  Types.JAVA_OBJECT:
                                          return  value.toString();
                                        case  Types.INTEGER:
                                            return  value.toString().trim();
                                        case  Types.VARCHAR:{
                                        System.out.println("varchar");
                                          return  value.toString().trim();
                                       }
                                        case  Types. DOUBLE :
                                        case  Types. FLOAT :
                                            return  value.toString().trim();
                                        case  Types.BIT:{
                                       System.out.println("BINARY VALUE");
                                          return  (( Boolean )value).booleanValue() ? "1" : "0";
                                       }
                                          case  Types.DATE:
                                            return  value.toString(); // This will need some conversion.
                                        default :{
                                      System.out.println("default");
                                          return  "\""+value.toString()+"\"";
                                             }
                                       }
                             } catch (Exception r){
                                System.out.println("Exc r===="+r.toString());
                                return   null ;
                             }
                                    }
Я так понимаю,что нужно наверное в методе dbRepresentation поставить проверку пришел ли ему на вход jComboBox,но фиг его знает как это сделать
...
Рейтинг: 0 / 0
18.04.2005, 20:21
    #33022050
adf
adf
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JComboBox in JTable
Слушай, при первом взгляде вот че:
Я не вижу где ты присваиваешь значения выбранного комбо в массив значений таблицы которые отвечают за данные ну там data[][] или Vector.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JComboBox in JTable / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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