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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> События от JButton, Изменение значения таблицы из-за JButton 
:(
    Опции темы
kaa2006
  Дата 15.8.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет.
У меня есть таблица с редактором JFormattedTextField.
и также на форме есть кнопка JButton
Интересует такой вопрос: Почему если в таблице пользователь не завершает редактирование таблицы, то при нажатие клавиши JButton происходит изменение значение таблицы, хотя в обработчике события JButton эта операция не запрашивалась.
А так как в таблице я в качестве значений использую тип Double, после выполнения выше приведенной операции убирается дробная часть.
За любое решение большое спасибо.
 smile 
PM MAIL   Вверх
kaa2006
  Дата 16.8.2006, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот код запустите и сами убедитесь:
FloatFilter.java
Код

package HTablePackage;

import javax.swing.text.*;
import javax.swing.*;
public class FloatFilter extends DocumentFilter {
    public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attr)
            throws BadLocationException {
        StringBuffer sb =new StringBuffer(text);
        String str,str1,str2;
        str=fb.getDocument().getText(0,fb.getDocument().getLength());
        str2=str;
        if (offset==str.length()+1)str1=fb.getDocument().getText(0,fb.getDocument().getLength())+text; else{
            if(str.substring(0, offset).equals("0")){
              super.remove(fb,0,1);
              str=fb.getDocument().getText(0,fb.getDocument().getLength());
              str1 =text+str.substring(0, offset-1)+str.substring(offset-1, str.length());
              offset-=offset;
            } else{
                str1 = str.substring(0, offset) + text +
                       str.substring(offset, str.length());
            }
        }
        if (str.length()==0){
                        str = sb.substring(0, sb.length());
                    }else {
                        str=str1;
                    }
            for (int i=sb.length()-1; i>=0; i--){
            char ch = sb.charAt(i);
            if (!Character.isDigit(ch))
                if (ch=='.'){
                    int p1 =str.indexOf('.');
                    int p2 =str.lastIndexOf('.');
                    if (p1!=p2) sb.deleteCharAt(i);
                } else sb.deleteCharAt(i);
        }
        str=sb.toString();
         if(str2.equals("0")&&text.equals("."))str=str2+text;
        super.replace(fb,offset,length,str,attr);
        str=fb.getDocument().getText(0,fb.getDocument().getLength());
        if (str.length()==0){
            super.insertString(fb,offset,str2,attr);}
    }

    public void remove (FilterBypass fb, int offset, int length)
    throws BadLocationException{
        String str, str1;
        str=fb.getDocument().getText(0,fb.getDocument().getLength());
        super.remove(fb,offset,length);
        str1=fb.getDocument().getText(0,fb.getDocument().getLength());
        if(str1.equals(".")){
            super.remove(fb,0,1);
            super.insertString(fb,0,"0",null);
        }
        if (str1.length()==0)super.insertString(fb,0,"0",null);
    }
}

class FormattedTextFieldVerifier extends InputVerifier{
    public boolean verify(JComponent component){
        JFormattedTextField field =
                (JFormattedTextField)component;
        return field.isEditValid();
    }
}


TableMain.java
Код

package HTablePackage;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.table.*;
import java.util.*;
import javax.swing.text.*;
import java.text.*;
import javax.swing.event.*; /**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2006</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class TableMain extends JFrame {

    ArrayList ALGr1= new ArrayList();
       ArrayList ALGrStr = new ArrayList();

   JPanel MainPanel = new JPanel();
    JFormattedTextField jFTF = new JFormattedTextField( new InternationalFormatter(
                NumberFormat.getInstance())
           {
               protected DocumentFilter getDocumentFilter(){
                return filter;
               }
            private DocumentFilter filter = new FloatFilter();
          });
         

   GridBagLayout gridBagLayout1 = new GridBagLayout();
   private Object [] zVtv = {"Объем памяти", "tвып.","Объем памяти", "tвып.","Объем памяти", "tвып.","Объем памяти", "tвып.","Объем памяти", "tвып."};
      private Object [][] nVtv ={{new Double(10),new Double(5), new Double(20),new Double(3),
        new Double(40.2),new Double(2),new Double(15),new Double(25),new Double(23),new Double(21)},
        {new Double(12d),new Double(35), new Double(27),new Double(13.987),new Double(29),
        new Double(4d),new Double(22),new Double(17),new Double(5),new Double(24)},
        {new Double(51d),new Double(25), new Double(23),new Double(13), new Double(21),
        new Double(46d),new Double(25d),new Double(20),new Double(21),new Double(29)},
        {new Double(12d),new Double(10d), new Double(28),new Double(6), new Double(21),
        new Double(35d),new Double(1d),new Double(24),new Double(19),new Double(20)}
        };
        private String [] ZVtv ={"Центр управления №1","Центр управления №2","Центр управления №3","Центр управления №4"};

   DefaultTableModel dtm= new DefaultTableModel(nVtv,zVtv);
      String [] gzaglVtv ={"Задание №1","Задание №2","Задание №3","Задание №4","Задание №5"};

   JTable jTabVtv;
   JScrollPane jScrollPane1;
   JButton jButton1 = new JButton();
   JButton jButton2 = new JButton();
    JPanel jPanel1 = new JPanel();
    BorderLayout borderLayout1 = new BorderLayout();

    public TableMain() {
        try {
            jbInit();
        } catch (Exception ex) {
            ex.printStackTrace();
        }

    }

    public static void main(String [] args){
        TableMain MT = new TableMain();
        MT.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        MT.setVisible(true);

    }

    private void jbInit() throws Exception {
        setSize(new Dimension(600,300)); setTitle("Иерархическая таблица");
        MainPanel.setLayout(gridBagLayout1);
        jButton1.setText("ДОБАВИТЬ");
        jButton1.addActionListener(new TableMain_jButton1_actionAdapter(this));
        jButton1.setMaximumSize(new Dimension(100, 25));
        jButton1.setMinimumSize(new Dimension(100, 25));
        jButton1.setPreferredSize(new Dimension(100, 25));
        jButton2.setMaximumSize(new Dimension(100, 25));
        jButton2.setMinimumSize(new Dimension(100, 25));
        jButton2.setPreferredSize(new Dimension(100, 25));
        jButton2.setText("УДАЛИТЬ");
        jButton2.addActionListener(new TableMain_jButton2_actionAdapter(this));
        jPanel1.setLayout(borderLayout1);
        getContentPane().add(MainPanel);
        InitialTable();


    }

   public void InitialTable(){
        jTabVtv= new JTable(dtm);
        TableColumnModel columnModel=jTabVtv.getColumnModel();
        jTabVtv.setTableHeader(new GroupableTableHeader(columnModel));
        jTabVtv.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        jScrollPane1 = new JScrollPane(jTabVtv);
        jPanel1.add(jScrollPane1, java.awt.BorderLayout.SOUTH);
        MainPanel.add(jPanel1, new GridBagConstraints(0, 0, 1, 5, 1.0, 1.0
                , GridBagConstraints.CENTER, GridBagConstraints.BOTH,
                new Insets(2, 2, 2, 2), 0, 0));
        MainPanel.add(jButton1, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0
               , GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
               new Insets(2, 2, 2, 2), 0, 0));
       MainPanel.add(jButton2, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0
               , GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL,
               new Insets(2, 2, 2, 2), 0, 0));
        jPanel1.add(jScrollPane1);
      //  jScrollPane1.getViewport().add(jTabVtv);
       jTabVtv.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
       jTabVtv.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jTabVtv.getSelectionModel().setSelectionInterval(0,0);

              int s2=100;
              for (int j = 0; j < jTabVtv.getColumnCount(); j++) {
                  TableColumnModel CM_T8 = jTabVtv.getColumnModel();
                  TableColumn ChCol8 = CM_T8.getColumn(j);
                  if (j%2==0){
                      ChCol8.setMaxWidth(s2+100);
                      ChCol8.setMinWidth(s2);
             ChCol8.setPreferredWidth(s2);
         } ChCol8.setCellEditor(new DefaultCellEditor(jFTF));
     }
    jTabVtv.repaint();
    }

    public void jButton1_actionPerformed(ActionEvent e) {
      
    }

    public void jButton2_actionPerformed(ActionEvent e) {
        
    }
}


class TableMain_jButton2_actionAdapter implements ActionListener {
    private TableMain adaptee;
    TableMain_jButton2_actionAdapter(TableMain adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton2_actionPerformed(e);
    }
}


class TableMain_jButton1_actionAdapter implements ActionListener {
    private TableMain adaptee;
    TableMain_jButton1_actionAdapter(TableMain adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jButton1_actionPerformed(e);
    }
}


Какое событие необходимо перехватывать чтобы при нажатии кнопки не отсекалась дробная часть?
PM MAIL   Вверх
AntonSaburov
Дата 16.8.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

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



Немного потерпи (если есть возможность) - сейчас времени нет совсем - завтра посмотрю.

Если конечно кто-то раньше не сделает.
PM MAIL WWW 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.0468 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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