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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> CellEditor 
:(
    Опции темы
alexsaltykov
Дата 6.6.2008, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Поспешил закрыть тему

Код

 JPanel jp = new JPanel();
 JButton jb = new JButton("jb");
 JTextField jtf = new JTextField(5);
   ...
 public Component getTableCellEditorComponent(JTable table, Object value,
            boolean isSelected, int row, int column)
 {
  jp.add(jb);
  jp.add(jtf);
  jp.addKeyListener(new KeyAdapter()
  {
   public void keyReleased(KeyEvent e)
   {
    if(e.getKeyCode() == KeyEvent.VK_F2)
     jtf.grabFocus();
   }
  });
  return jp;
 }


Если  KeyEvent.VK_F3, то уже не работает 
и как сделать что бы редактирование сразу начиналось как только пользователь начал вводить текст ???
PM MAIL   Вверх
dorogoyIV
Дата 6.6.2008, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



Цитата(alexsaltykov @  6.6.2008,  11:45 Найти цитируемый пост)
как сделать что бы редактирование сразу начиналось как только пользователь начал вводить текст ???

Код

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

public class ForAlex extends JFrame
{
 JTable table = new JTable(4, 2);

 public ForAlex()
 {
  table.getColumnModel().getColumn(0).setCellEditor(new TableEditor());
  table.setRowHeight(40);
  add(new JScrollPane(table));
 }

 public static void main(String [] args)
 {
  JFrame f = new ForAlex();
  f.setBounds(100, 100, 400, 300);
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}

class TableEditor extends AbstractCellEditor
                  implements TableCellEditor
{
 JPanel jp = new JPanel();
 JButton jb = new JButton("jb");
 JTextField jtf = new JTextField(5);

 public boolean    stopCellEditing()
 {
  return true;
 }

 public boolean    isCellEditable(EventObject anEvent)
 {
  return true;
 }

 public Object getCellEditorValue()
 {
  return null;
 }

 public Component getTableCellEditorComponent(final JTable table, Object value,
            boolean isSelected, int row, int column)
 {
  jp.add(jb);
  jp.add(jtf);

  jp.addKeyListener(new KeyAdapter()
  {
   public void keyReleased(KeyEvent e)
   {
    if(e.getKeyCode() == KeyEvent.VK_F2)
     jtf.grabFocus();
   }
  });

  jtf.addKeyListener(new KeyAdapter()
  {
   public void keyReleased(KeyEvent e)
   {
    int r = table.getSelectedRow();
    table.setValueAt(jtf.getText(), r, 1);
   }
  });

  return jp;
 }
}



Цитата(alexsaltykov @  6.6.2008,  11:45 Найти цитируемый пост)
Если  KeyEvent.VK_F3, то уже не работает

работает.
сначала надо нажать F2 для редактирования самой ячейки, а потом F3 что бы сграбить фокус
PM MAIL   Вверх
alexsaltykov
Дата 6.6.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

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

Да, так работает

а сразу редактирование в примере не начинается, только после того как F2 нажмешь, по идеи надо заставить ячейку открыть на редактирование программно, не нажимая F2
Этот метода должен начать редактирование на любое нажатие клавиш
Код

 public boolean    isCellEditable(EventObject anEvent)
 {
  return true;
 }

При вводе текста панель jp с jb и jtf появляется, но ничего не происходит. Текст в ячейке не набирается пока не нажмешь F2, а хотелось бы что бы сразу в jtf текс набирался.
PM MAIL   Вверх
dorogoyIV
Дата 8.6.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



 smile  нечто подобное
Код

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

public class ForAlex extends JFrame
{
 JTable table = new JTable(4, 2);
 TableEditor editor = new TableEditor();

 public ForAlex()
 {
  table.getColumnModel().getColumn(0).setCellEditor(editor);
  table.setRowHeight(40);
  add(new JScrollPane(table));

  table.addKeyListener(new KeyAdapter()
  {
   public void keyReleased(KeyEvent e)
   {
    if(table.getSelectedColumn() == 0)
    {
     try
     {
      Robot r = new Robot();
      r.keyPress(KeyEvent.VK_F2);
     }
     catch(Exception ex){}
    }
   }
  });
 }

 public static void main(String [] args)
 {
  JFrame f = new ForAlex();
  f.setBounds(100, 100, 400, 300);
  f.setVisible(true);
  f.setDefaultCloseOperation(3);
 }
}

class TableEditor extends AbstractCellEditor
                  implements TableCellEditor
{
 JPanel jp = new JPanel();
 JButton jb = new JButton("jb");
 JTextField jtf = new JTextField(5);

 TableEditor()
 {
  jp.add(jb);
  jp.add(jtf);

  jp.addKeyListener(new KeyAdapter()
  {
   public void keyReleased(KeyEvent e)
   {
    jtf.grabFocus();
   }
  });
 }

 public boolean stopCellEditing()
 {
  return true;
 }

 public boolean isCellEditable(EventObject anEvent)
 {
  return true;
 }

 public Object getCellEditorValue()
 {
  return null;
 }

 public Component getTableCellEditorComponent(final JTable table, Object value,
            boolean isSelected, int row, int column)
 {
  jtf.addKeyListener(new KeyAdapter()
  {
   public void keyPressed(KeyEvent e)
   {
    if(e.getKeyCode() == KeyEvent.VK_ENTER)
    {
     jtf.setText("");

     try
     {
      Robot r = new Robot();
      r.keyPress(KeyEvent.VK_ESCAPE);
     }
     catch(Exception ex){}
    }
   }

   public void keyReleased(KeyEvent e)
   {
    int row = table.getSelectedRow();
    table.setValueAt(jtf.getText(), row, 1);
   }
  });

  return jp;
 }
}

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.4062 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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