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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Переход с нижней строки на первую в след. колонке, Переход с нижней строки на первую в след 
V
    Опции темы
skif18
Дата 8.12.2009, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

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



Код

 if (e.getKeyCode() == KeyEvent.VK_DOWN) {
    int row=jTable.getSelectedRow();
    if((row+1==jTable.getRowCount()) && jTable.getColumnCount()>=jTable.getSelectedColumn()+3){
        jTable.changeSelection(0,jTable.getSelectedColumn()+3, false, false);
    } 
}

Метод KeyPressed JTable. Но что интересно переходит не на 0ю строку(т.е. верхнюю в таблице) на автоматом оказывается на второй строке... В чем может быть косяк?


--------------------

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



Потому что, видимо, выполняется кроме твоего обработчика еще и стандартный. Покажи полный код.


--------------------
PM MAIL   Вверх
skif18
Дата 8.12.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

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



Код

private JTable getJTable() {
        if (jTable == null) {
            jTable = new JTable();        
            jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            jTable.setCellSelectionEnabled(true);
            jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            jTable.setShowGrid(true);
            jTable.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
                        jTable.addKeyListener(new java.awt.event.KeyListener() {
                public void keyTyped(java.awt.event.KeyEvent e) {
        
                }
                                public void keyPressed(java.awt.event.KeyEvent e) {
                                   if(e.getKeyCode() >= KeyEvent.VK_0  && e.getKeyCode() <= KeyEvent.VK_9 || e.getKeyCode() >= KeyEvent.VK_NUMPAD0    && e.getKeyCode() <= KeyEvent.VK_NUMPAD9)
                        {
                             int ColumnSel=0;
                                if((jTable.getSelectedColumn()%3)==2){
                                 ColumnSel=jTable.getSelectedColumn();
                                }else if((jTable.getSelectedColumn()%3)==0){ 
                                    ColumnSel=jTable.getSelectedColumn()+2;
                                }else if((jTable.getSelectedColumn()%3)==1){ 
                                    ColumnSel=jTable.getSelectedColumn()+1;
                             } 
                             
                                if(!jTable.isEditing() && !e.isActionKey() &&
                                        !e.isControlDown() && !e.isAltDown() &&
                                        e.getKeyCode()!=KeyEvent.VK_SHIFT) {

                                        int rowIndexStart = jTable.getSelectedRow();
                                        int colIndexStart =jTable. getSelectedColumn();

                                        if(rowIndexStart==-1 || colIndexStart==-1)
                                        return;

                                        jTable.editCellAt(rowIndexStart,ColumnSel);
                                        Component c = jTable.getEditorComponent();
                                        if(c instanceof JTextComponent)
                                        ((JTextComponent)c).setText("");
                                        }
                        
                        }
                     else     if (e.getKeyCode() == KeyEvent.VK_DOWN) {

                            int row=jTable.getSelectedRow();
                            if((row+1==jTable.getRowCount()) && jTable.getColumnCount()>=jTable.getSelectedColumn()+3){
                                int col=jTable.getSelectedColumn();
                                   jTable.clearSelection();
                                   jTable.changeSelection(0,col+3, false, false);
                            } 
                     }
                    else     if (e.getKeyCode() == KeyEvent.VK_UP) {

                            int    row=jTable.getSelectedRow();
                                if((row==0) && jTable.getSelectedColumn()>=3){
                                    int col=jTable.getSelectedColumn();
                                       jTable.clearSelection();
                                       jTable.changeSelection(jTable.getRowCount()-1,col-3, false, false);
                                }
                        }
                         
                }

                public void keyReleased(java.awt.event.KeyEvent e) {
                             }                
            });
for(int i=0;i<jTable.getColumnCount();i++){
    TableColumn col = jTable.getColumnModel().getColumn(i);
         if(i%3==0){
             int width = 550;
             col.setPreferredWidth(width); 
         }else if((i%3)==1){
             int width = 150;
             col.setPreferredWidth(width); 
         }else if((i%3)==2){
             int width = 150;
             col.setPreferredWidth(width);     
         }
     }
             
             
    }
        return jTable;
}



--------------------

PM MAIL ICQ   Вверх
comcon1
Дата 8.12.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 11.6.2005
Где: Москва ДАС-МГУ

Репутация: нет
Всего: 17



Ну да. addKeyListener - это значит, что стандартный keyListener тож выполняется. Скажи, что происходит, когда ты нажимаешь "вниз" на последней строке БЕЗ твоего keyListener-а?


--------------------
PM MAIL   Вверх
skif18
Дата 8.12.2009, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

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



ничего не меняется. выделение и фокус так и остаются на последней строке таблицы.


--------------------

PM MAIL ICQ   Вверх
skif18
Дата 8.12.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

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



Код

private JTable getJTable() {
        if (jTable == null) {
            jTable = new JTable();        
            jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            jTable.setRowSelectionAllowed(true);
            jTable.setColumnSelectionAllowed(true);
            jTable.setCellSelectionEnabled(true);
            jTable.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
            jTable.setShowGrid(true);
            jTable.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
            Enter=0;
            new TableFindAction().install(jTable);
            jTable.addMouseListener(new java.awt.event.MouseAdapter() {
              public void mouseClicked(java.awt.event.MouseEvent e) {
                  
                  int c=0;                 
                 if((jTable.getSelectedColumn()%3)==2){
                     c=jTable.getSelectedColumn();                         
             
                 }
                 if((jTable.getSelectedColumn()%3)!=2){
                     if((jTable.getSelectedColumn()%3)==0){
                         c=jTable.getSelectedColumn()+2;
                     }
                     if((jTable.getSelectedColumn()%3)==1){
                         c=jTable.getSelectedColumn()+1;
                     }
                 
                     }
                   jTable.editCellAt(jTable.getSelectedRow(),c );
//                    if(c==2){
                 
                    Component editor = jTable.getEditorComponent();
                    editor.requestFocus(); // fix!
                    
                    if (editor instanceof JTextField)
                  
                    {
                        ((JTextField)editor).selectAll();  // а это так, бонус...
                        ((JTextField)editor).setText("");
                    }
                    }
   //           }
             });
            jTable.addKeyListener(new java.awt.event.KeyListener() {
                public void keyTyped(java.awt.event.KeyEvent e) {
        
                }
                public void keyPressed(java.awt.event.KeyEvent e) {
                         if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                         int i = jTable.getSelectedColumn();
                         if(i%3==0){
                             if(i!=0){
                                 jTable.changeSelection(jTable.getSelectedRow(), jTable.getSelectedColumn(), false, false);
                                 jTable.requestFocus();
                             }else{
                                 jTable.changeSelection(jTable.getSelectedRow(), 3, false, false);
                                 jTable.requestFocus();     
                             }
                         }else if((i%3)==1){
                             if(i!=1){
                                 jTable.changeSelection(jTable.getSelectedRow(), i-1, false, false);
                                 jTable.requestFocus();
                             }else{
                                 jTable.changeSelection(jTable.getSelectedRow(), 3, false, false);
                                 jTable.requestFocus();    
                             }
                         }else if((i%3)==2){
                             if(i!=2){
                                 jTable.changeSelection(jTable.getSelectedRow(), i-2, false, false);
                                 jTable.requestFocus();
                             }else{
                                 jTable.changeSelection(jTable.getSelectedRow(), (jTable.getColumnCount()-1), true, true);
                                 jTable.requestFocus();    
                             }     
                     }   
                }else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    int row= jTable.getSelectedRow();
                    if((row+1)==jTable.getRowCount()){
                        
                        int i = jTable.getSelectedColumn();
//                         System.out.println("col="+i);
//                         System.out.println("row="+row); 
//                         System.out.println("wsego row="+jTable.getRowCount());
                         if(i%3==0){
//                             System.out.println("Kol="+i);
                             if(i==(jTable.getColumnCount()-3)){
                                 jTable.changeSelection(jTable.getSelectedRow(), (jTable.getColumnCount()-1), false, false);
                                 jTable.requestFocus();
                             }else{
                                 jTable.changeSelection(0, i+4, false, false);
                                 jTable.requestFocus();     
                             }
                         }else if((i%3)==1){
//                             System.out.println("Kol="+i);
                             if(i==(jTable.getColumnCount()-2)){
                                 jTable.changeSelection(jTable.getSelectedRow(), (jTable.getColumnCount()-1), false, false);
                                 jTable.requestFocus();
                             }else{
                                 jTable.changeSelection(0, i+3, false, false);
                                 jTable.requestFocus();    
                             }
                         }else if((i%3)==2){
//                             System.out.println("Kol="+i);
//                             System.out.println("jTable.getColumnCount()="+jTable.getColumnCount());
                             if(i==(jTable.getColumnCount()-1)){
                                 jTable.changeSelection(jTable.getSelectedRow(), 1, false, false);
//                                 System.out.println("Kol="+i);
//                                 jTable.requestFocus();
                             }else{
                                 jTable.changeSelection(0, i+2, false, false);
//                                 jTable.requestFocus();    
                             }     
                     }   
                        
                        
                        
                    }else{
                    int i = jTable.getSelectedColumn();
//                     System.out.println("col="+i);
//                     System.out.println("row="+row); 
//                     System.out.println("wsego row="+jTable.getRowCount());
                     if(i%3==0){
//                         System.out.println("Kol="+i);
                         if(i==(jTable.getColumnCount()-3)){
                             jTable.changeSelection(jTable.getSelectedRow(), (jTable.getColumnCount()-1), false, false);
                             jTable.requestFocus();
                         }else{
                             jTable.changeSelection(jTable.getSelectedRow(), i+1, false, false);
                             jTable.requestFocus();     
                         }
                     }else if((i%3)==1){
//                         System.out.println("Kol="+i);
                         if(i==(jTable.getColumnCount()-2)){
                             jTable.changeSelection(jTable.getSelectedRow(), (jTable.getColumnCount()-1), false, false);
                             jTable.requestFocus();
                         }else{
                             jTable.changeSelection(jTable.getSelectedRow(), i, false, false);
                             jTable.requestFocus();    
                         }
                     }else if((i%3)==2){
//                         System.out.println("Kol="+i);
//                         System.out.println("jTable.getColumnCount()="+jTable.getColumnCount());
                         if(i==(jTable.getColumnCount()-1)){
                             jTable.changeSelection(jTable.getSelectedRow(), 1, false, false);
//                             jTable.requestFocus();
                         }else{
                             jTable.changeSelection(jTable.getSelectedRow(), i+2, false, false);
//                             jTable.requestFocus();    
                         }     
                 }   
             }
                }    
                     else if(e.getKeyCode() >= KeyEvent.VK_0  && e.getKeyCode() <= KeyEvent.VK_9 || e.getKeyCode() >= KeyEvent.VK_NUMPAD0  && e.getKeyCode() <= KeyEvent.VK_NUMPAD9)
                        {
//                            javax.swing.text.jTextComponent
                             int ColumnSel=0;
                                if((jTable.getSelectedColumn()%3)==2){
                                 ColumnSel=jTable.getSelectedColumn();
                                }else if((jTable.getSelectedColumn()%3)==0){ 
                                    ColumnSel=jTable.getSelectedColumn()+2;
                                }else if((jTable.getSelectedColumn()%3)==1){ 
                                    ColumnSel=jTable.getSelectedColumn()+1;
                             } 
                             
                                if(!jTable.isEditing() && !e.isActionKey() &&
                                        !e.isControlDown() && !e.isAltDown() &&
                                        e.getKeyCode()!=KeyEvent.VK_SHIFT) {
                                        int rowIndexStart = jTable.getSelectedRow();
                                        int colIndexStart =jTable. getSelectedColumn();
                                        if(rowIndexStart==-1 || colIndexStart==-1)
                                        return;
                                        jTable.editCellAt(rowIndexStart,ColumnSel);
                                        Component c = jTable.getEditorComponent();
                                        if(c instanceof JTextComponent)
                                        ((JTextComponent)c).setText("");
                                        }
                        }
                     else     if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                            int row=jTable.getSelectedRow();
                            if((row+1==jTable.getRowCount()) && jTable.getColumnCount()>=jTable.getSelectedColumn()+3){
                                int col=jTable.getSelectedColumn();
                                   jTable.clearSelection();
                                   jTable.changeSelection(0,col+3,false,false);
//                                    System.out.println("jTable.getSelectedRow()="+jTable.getSelectedRow());
//                                    System.out.println("jTable.getSelectedColumn()="+jTable.getSelectedColumn()); 
                                   jTable.requestFocus();
//                                   ObnovCena(jTable,0,0);
                            }
                     }
                    else     if (e.getKeyCode() == KeyEvent.VK_UP) {
                            int    row=jTable.getSelectedRow();
                                if((row==0) && jTable.getSelectedColumn()>=3){
                                    int col=jTable.getSelectedColumn();
                                       jTable.clearSelection();
                                       jTable.changeSelection(jTable.getRowCount()-1,col-3, false,false);
//                                        System.out.println("jTable.getSelectedRow()="+jTable.getSelectedRow()); 
                                       jTable.requestFocus();     
//                                       ObnovCena(jTable,jTable.getRowCount()-1,col-3);
//                                       jTable.changeSelection(jTable.getRowCount()-1,col-3, false, false);
                                }
                        }
                         
                }

                public void keyReleased(java.awt.event.KeyEvent e) {


                    
                    if(e.getKeyCode() == KeyEvent.VK_TAB){
                            if(jTabbedPane1.getSelectedIndex()+1!=jTabbedPane1.getTabCount()){
                                jTabbedPane1.setSelectedIndex(jTabbedPane1.getSelectedIndex()+1);
                                jTabbedPane1.requestFocus();
                            }else{
                                jTabbedPane1.setSelectedIndex(0);
                                jTabbedPane1.requestFocus();    
                            }
                            
                        }
                 else if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                            ObnovCena(jTable,jTable.getSelectedRow(),jTable.getSelectedColumn());
                     }else if (e.getKeyCode() == KeyEvent.VK_UP) {
                            ObnovCena(jTable,jTable.getSelectedRow(),jTable.getSelectedColumn());
                     }else if (e.getKeyCode() == KeyEvent.VK_ENTER) {
                            ObnovCena(jTable,jTable.getSelectedRow(),jTable.getSelectedColumn());
                 }
                }                
            });
            
            jTable.addFocusListener(new java.awt.event.FocusListener() {
                public void focusGained(java.awt.event.FocusEvent e) {
//                        System.out.println("FocusGained!! ");
                    
                    if(jTable.getSelectedRow()<0){
                        return;
                    }
                    ObnovCena(jTable,jTable.getSelectedRow(),jTable.getSelectedColumn());
            }
                public void focusLost(java.awt.event.FocusEvent e) {
                }
            });
            
        
            
            for(int i=0;i<jTable.getColumnCount();i++){
                 TableColumn col = jTable.getColumnModel().getColumn(i);
    //         System.out.println("Kol="+i);
                 if(i%3==0){
        //         System.out.println("Kol="+i);
                     int width = 550;
                     col.setPreferredWidth(width); 
                 }else if((i%3)==1){
//                     System.out.println("Kol="+i);
                     int width = 150;
                     col.setPreferredWidth(width); 
                 }else if((i%3)==2){
//                     System.out.println("Kol="+i);
                     int width = 150;
                     col.setPreferredWidth(width);     
                 }
             }
             
             
            }
        return jTable;
    }


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

Это сообщение отредактировал(а) skif18 - 8.12.2009, 18:36


--------------------

PM MAIL ICQ   Вверх
skif18
Дата 10.12.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

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



Код

                         if (e.getKeyCode() == KeyEvent.VK_DOWN) {
                            int row=jTable.getSelectedRow();
                            if((row+1==jTable.getRowCount()) & jTable.getColumnCount()>=jTable.getSelectedColumn()+3){
                                int col=jTable.getSelectedColumn();
                                int nul=0;
                                jTable.changeSelection(nul,col+3,false,false);
                                System.out.println("jTable.get0Row()="+jTable.getValueAt(nul,col+1));
                            }


но сообщение то выдает правильное... непонятно. Копаю. smile 

и даже 
Код

jTable.getSelectionModel().clearSelection();
jTable.getSelectionModel().setSelectionInterval(0,0);

полюбому переносит на первую строку, а не на нулевую.

Это сообщение отредактировал(а) skif18 - 10.12.2009, 16:24


--------------------

PM MAIL ICQ   Вверх
skif18
Дата 10.12.2009, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 358
Регистрация: 17.5.2007
Где: Молдова, Кишинев

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



ха, все оказалось просто. 
Код

 if (e.getKeyCode() == KeyEvent.VK_DOWN) {
        int row1=jTable.getSelectedRow();
    if((row1+1==jTable.getRowCount())  & jTable.getColumnCount()>=jTable.getSelectedColumn()+3){
           int col=jTable.getSelectedColumn();
           int nul=0;
        jTable.changeSelection(nul,col+3,false,false);
        e.consume();
    }

Все из-за JTables UI
помог пост  http://www.itags.org/java/676374/


--------------------

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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