Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Множественное создание едитора(JComboBox)дляJTable 
V
    Опции темы
newObject
Дата 20.10.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 29.6.2006

Репутация: 1
Всего: 2



Доброго всем время суток! smile 
Вот в заголовке собственно и суть проблемы.
Имеется JTable  для некоторых колонок которого устанавливается 
Цитата

DefaultCellEditor editor = new DefaultCellEditor( new JComboBox(items) );
editor.addCellEditorListener( слушатель(CellEditorListener) );
...
слушатель editingStop() (слушатель для всех типов в таблице один)
  System.out.println(...)
слушатель

Все хорошо, но почему для ячеек с едитором JComboBox, едитор вызывается 3!!! раза, первый раз со значением которое было в ячейке, а два других с пустым. Т.е. если открыть ячейку на редактирование и закрыть, то установится пустое значение!
Причем первый раз создается едитор при открытии ячейки на редактирование, а другие два при закрытии!
Далее смешнее, если открыть и выбрать значание из списка, то первый раз со значением из ячейки, а второй с выбранным. Т.Е. ДВА раза!!!
Для всех остальных ячеек где вызывается JTextEditor все хорошо, один раз при закрытии!
Да еще в модели таблицы я реализовал Unod Redo, так вот эти три (два) запуска эдитора устанавливают значение для модели ОДИН раз. smile 

Может кто сталкивался? smile 

Это сообщение отредактировал(а) newObject - 20.10.2006, 15:51
PM MAIL   Вверх
powerOn
Дата 22.10.2006, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 31
Всего: 159



Выкладывай код более подробный, желательно чтоб запустить можно было, по приведенному трудно понять как проблему решать.


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
newObject
Дата 23.10.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 29.6.2006

Репутация: 1
Всего: 2



Привожу код не из своего приложениея, а наваяиный ввиде тестового.
Код который используется в проекте достаточно сложный и громозкий.
Поэтому для простоты ощущений предоставляю тестовы код, рабочий и поведение схоже.
За исключением того, что при открытии ячейки на редактирование и закрытии НЕ устанавливается пустое значение.
Код

import javax.swing.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.awt.*;

public class SimpleTablesComboBox extends JFrame { 
    private Object[][] data = new String[][] { { "Strange", "Blue", "Sport" }, { "Econome", "Red", "Classic" }};
    private Object[] columns = new String[] { "Model", "Color", "Design" };
    private int CLICK_COUNT = 2;
    private JTable table = null;
    
    public SimpleTablesComboBox() {
        super("SimpleTablesComboBox");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        table = new JTable(data, columns);        
        table.setRowHeight(40);
        table.setIntercellSpacing( new Dimension(10, 10) );
        JComboBox combo = new JComboBox( data[0] );
        combo.setEditable(true);
        combo.setFont( new Font("Arial", Font.PLAIN, 12) );
        DefaultCellEditor editor = new DefaultCellEditor(combo);
        editor.setClickCountToStart(CLICK_COUNT);
        editor.addCellEditorListener( applyChangeToManyCells() );
        table.getColumnModel().getColumn(0).setCellEditor(editor);
        
        table.getDefaultEditor(data[0][0].getClass()).addCellEditorListener( applyChangeToManyCells() );
        
        JPanel contents = new JPanel( new GridLayout(0, 2) );
        contents.add( new JScrollPane(table) );

        setContentPane(contents);
        setSize(600, 200);
        setVisible(true);
    }
       
    public CellEditorListener applyChangeToManyCells() {
            return new CellEditorListener() { 
                public void editingStopped(ChangeEvent e) {
                    int[] rows = table.getSelectedRows();
                    Object cellValue = ((TableCellEditor)e.getSource()).getCellEditorValue();
                    int cellColumn = table.getColumnModel().getSelectionModel().getLeadSelectionIndex();
                    for(int i=0; i<rows.length; i++)
                        if( !cellValue.equals( table.getValueAt(rows[i], cellColumn) ) ) 
                            table.setValueAt(cellValue, rows[i], cellColumn);
                    System.out.println("Selected column " + cellColumn);
                    System.out.println("ChangeEvent '" + e.toString()+ "'");
                    System.out.println("Editor Component '"+ ((DefaultCellEditor)e.getSource()).getComponent().getClass().getName() +"'");
                    System.out.println("Editor value '" + cellValue.toString() + "'");
                    for(int i=0; i<rows.length; i++)
                        System.out.println(i + " Selected row " + rows[i]);
//                    if( !((DefaultCellEditor)e.getSource()).getComponent().getClass().getName().equals("javax.swing.JComboBox") )
//                        table.changeSelection( rows[rows.length-1], cellColumn+1, false, false );
                }
                public void editingCanceled(ChangeEvent e) {
                }
            };
        }
        
    public static void main(String[] args) {
        new SimpleTablesComboBox();
    }
}


Заранее благодарен за потраченое Вами время на рассмотрение поста  smile 
PM MAIL   Вверх
newObject
Дата 26.10.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 29.6.2006

Репутация: 1
Всего: 2



Есть ли мнения, о таком поведении JComboBox? smile 
PM MAIL   Вверх
newObject
Дата 8.11.2006, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 29.6.2006

Репутация: 1
Всего: 2



Так как мнений и рекомендаций нет, тему закрываю. smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0426 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.