powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JComboBox in JTable
11 сообщений из 11, страница 1 из 1
JComboBox in JTable
    #33021058
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем добрый день.Есть таблица,которая расширяет 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
JComboBox in JTable
    #33021121
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
написать собс. класс, расширяющий AbstractTableModel,
в методе
setValueAt(Object value, int row, int col) {}
отправлять изменения
Если комбо не доступен, то в методе
public boolean isCellEditable(int row, int col) {} на номер столбца возвращать тру
...
Рейтинг: 0 / 0
JComboBox in JTable
    #33021312
Евгений Путилин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
peter6636
Код: plaintext
1.
2.
3.
TableColumnModel tcm=jTable1.getColumnModel();
       TableColumn tc=tcm.getColumn( 2 );
       tc.setCellEditor( new  DefaultCellEditor(myComboBox));
.....
Как это все работает фиг его знает,может кто-то пояснит последовательность действий.
Тебе надо не render изменять а Editor.
...
Рейтинг: 0 / 0
JComboBox in JTable
    #33021602
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так мне это все делать в модели AbstractTableModel или в классе реализующем интерфейс TableСellEditor.
Если в TableСellEditor,тогда как таблица будет знать что в ячейке новое заначение появилось,че-то я запутался.
...
Рейтинг: 0 / 0
JComboBox in JTable
    #33021623
Фотография 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
JComboBox in JTable
    #33021663
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
JComboBox in JTable
    #33021814
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A в setValueAt(){}
че делаешь?
...
Рейтинг: 0 / 0
JComboBox in JTable
    #33021913
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче сделал так:
Код: 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
JComboBox in JTable
    #33021916
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот результирующая:
...
Рейтинг: 0 / 0
JComboBox in JTable
    #33021932
Фотография peter6636
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь про метод 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
JComboBox in JTable
    #33022050
Фотография adf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Слушай, при первом взгляде вот че:
Я не вижу где ты присваиваешь значения выбранного комбо в массив значений таблицы которые отвечают за данные ну там data[][] или Vector.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / JComboBox in JTable
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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