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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> jTable вход в редактирование 
:(
    Опции темы
aliks
Дата 15.1.2010, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Проблема в следующем, предположим в ячейке есть значение "2", пользователь находясь в этой ячейке, наживает "3". В итоге мы в ячейке имеем "23". Как сделать чтобы предыдущее значение затиралось. Думал покрутить так

Код

        myTable.getDefaultEditor(Boolean.class).addCellEditorListener(
                new CellEditorListener() {
                public void editingCanceled(ChangeEvent e) {/*do smth*/}
                public void editingStopped(ChangeEvent e) {/*do smth*/}
              }
        ); 


Но здесь нет входа в режим редактирования.
--------------------
Любимая кнопка - F1, Любимое спасибо - Плюс в репутацию
PM MAIL Jabber   Вверх
access
Дата 15.1.2010, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



где-то было уже на форуме, вход на редактирование ч/з ентер, вся ячейка сразу выделяется
Код

        tIndic.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),"cellediting");
        tIndic.getActionMap().put("cellediting", new AbstractAction() {
            public void actionPerformed(ActionEvent e) {
                int row = tIndic.getSelectedRow();
                int col = tIndic.getSelectedColumn();

                if (tIndic.isEditing()) {
                    tIndic.getCellEditor().stopCellEditing();
                }
                else {
                    tIndic.editCellAt(row,col);
                    ((JTextField)tIndic.getDefaultEditor(Double.class).getTableCellEditorComponent(tIndic, tIndic.getValueAt(row, col), true, row, col)).grabFocus();
                    ((JTextField)tIndic.getDefaultEditor(Double.class).getTableCellEditorComponent(tIndic, tIndic.getValueAt(row, col), true, row, col)).selectAll();
                }
            }
        });


tIndic - JTable

Это сообщение отредактировал(а) access - 15.1.2010, 16:44
PM MAIL   Вверх
aliks
Дата 15.1.2010, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ага, классно, вы мой пост мне же скопировали!!!    smile 
Извенюсь, почти мой, я тоже самое писал и советовал
мне не нужно по Enter мне нужно по любой клавише

Это сообщение отредактировал(а) aliks - 15.1.2010, 17:14
--------------------
Любимая кнопка - F1, Любимое спасибо - Плюс в репутацию
PM MAIL Jabber   Вверх
access
Дата 15.1.2010, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хм, интересно, у вас в ячейке будет только однозначная цифра? Т.е. было 2, ввели 3 - два затёрлось, осталось 3, ввели 5 - в ячейке остаётся 5. Так что ли? Или, например, отредактировали, запостили, теперь хотите стрелкой вниз переместиться на строку вниз и... опять редактируем ту же ячейку?

Это сообщение отредактировал(а) access - 15.1.2010, 17:42
PM MAIL   Вверх
aliks
Дата 19.1.2010, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Число может быть как однозначное так и многозначное
--------------------
Любимая кнопка - F1, Любимое спасибо - Плюс в репутацию
PM MAIL Jabber   Вверх
Connie
Дата 26.1.2010, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я куски кода накидаю, пример рабочий тут http://www.diacalc.org/online.html

Код

private DecimalFormat df0 = new DecimalFormat("0.0");
private FloatEditor cellEditor0 = new FloatEditor(cellField0, df0);
floatRenderer = new FloatRenderer("0.0");
...
menuList.setDefaultRenderer(Float.class, floatRenderer);//это таблица
menuList.getColumnModel().getColumn(1).setCellEditor(cellEditor0);


Код

import javax.swing.*;
import java.text.*;
import lookout.settings.ProgramSettings;


public class FloatEditor extends DefaultCellEditor{
  private NumberFormat floatFormat;
  private PositiveFloatVerifier pfv = new PositiveFloatVerifier(true);

  public FloatEditor(final JFormattedTextField tf, NumberFormat nf) {
   super(tf);
   floatFormat = nf;
   tf.setFocusLostBehavior(JFormattedTextField.COMMIT);
   tf.setHorizontalAlignment(SwingConstants.RIGHT);
   tf.setBorder(null);
   tf.setFont(ProgramSettings.getInstance().getIn().getFont(tf.getFont()));

   delegate = new EditorDelegate() {
     @Override
    public void setValue(Object param) {
     Float _value = (Float)param;
     if (_value == null) {
      tf.setValue(floatFormat.format(0.0f));
     } else {
      Float _d = _value.floatValue();
      String _format = floatFormat.format(_d);
      tf.setText(_format);
     }
     tf.selectAll();
    }

     @Override
    public Object getCellEditorValue() {
     try {
      pfv.verify(tf);
      String _field = tf.getText();
      Number _number = floatFormat.parse(_field);
      Float _parsed = _number.floatValue();
      Float d = new Float(_parsed);
      return d;
     } catch (ParseException e) {
        return new Float(0.0f);
     }
    }
   };
  }
}



Код
import lookout.settings.ProgramSettings;
import javax.swing.table.DefaultTableCellRenderer;

import java.awt.Component;
import javax.swing.JTable;

import javax.swing.JFormattedTextField;
import javax.swing.JTextField;

import javax.swing.border.Border;
import javax.swing.BorderFactory; 

import javax.swing.UIManager;

import java.text.DecimalFormat;


public class FloatRenderer extends DefaultTableCellRenderer{
   
    private JFormattedTextField fld;
    private Border selectedBorder=null;
    private Border unselectedBorder=null;
    private Border emptyBorder = BorderFactory.createEmptyBorder();
    
    public FloatRenderer(String mask) {
        super(); 
        fld = new JFormattedTextField(new DecimalFormat(mask));
        fld.setHorizontalAlignment(JTextField.RIGHT);
        fld.setEditable(false);
        fld.setFont(ProgramSettings.getInstance().getIn().getFont(fld.getFont()));
        //format.setMinimumFractionDigits(1);
        //format.setMaximumFractionDigits(1);
    }
    
    @Override 
    public Component getTableCellRendererComponent(
                            JTable table, Object value,
                            boolean isSelected, boolean hasFocus,
                            int row, int column) {
        fld.setValue(value);
        //fld.setText(format.format(value));
        if (isSelected){
            fld.setBackground(table.getSelectionBackground());
            if (hasFocus) {
                if (selectedBorder == null) {
                selectedBorder = UIManager.getBorder("Table.focusCellHighlightBorder");
                
                }
                fld.setBorder(selectedBorder);
            } else {
                if (unselectedBorder == null) {
                    unselectedBorder = BorderFactory.createMatteBorder(1,1,1,1,
                                              table.getSelectionBackground());
                }
                fld.setBorder(unselectedBorder);
            }
        }
        else { //Не выбрано и нет фокуса
            fld.setBackground(table.getBackground());
            fld.setBorder(emptyBorder);
            }
 
     return fld;
    }

}


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

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

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


 




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


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

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