Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JTree -> CheckBox / 8 сообщений из 8, страница 1 из 1
30.12.2005, 16:02
    #33466188
GlukOza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTree -> CheckBox
Вперемешку с шампанским...
Так как домой не отпускают, продолжаю работать и задавать вопросы:))
Может есть еще кто...

Создала дерево JTree с CheckBox'сами. Данные из базы.

Теперь надо остледить изменения и назад в базу, обновить данные.

Не знаю как вытянуть массив изменений. А не текущую галочку на боксе.
...
Рейтинг: 0 / 0
30.12.2005, 16:13
    #33466209
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTree -> CheckBox
то есть нужно получить только те, которые изменились?

я делал так: у объекта есть поле isSelected, для всех объектов я
проверяю это поле и формирую массив

-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
30.12.2005, 16:19
    #33466217
GlukOza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTree -> CheckBox
Deadyто есть нужно получить только те, которые изменились?

я делал так: у объекта есть поле isSelected, для всех объектов я
проверяю это поле и формирую массив

-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3

Желательно. Спасибо, буду пробывать...
...
Рейтинг: 0 / 0
10.01.2006, 18:26
    #33474992
GlukOza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTree -> CheckBox
Всем ребятам привет. И не ребятам тоже привет :))

Помогите разобраться:

Есть такой класс:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
 class  CheckBoxNodeEditor  extends  AbstractCellEditor  implements  TreeCellEditor {

  CheckBoxNodeRenderer renderer =  new  CheckBoxNodeRenderer();

  ChangeEvent changeEvent =  null ;

  JTree tree;

   public  CheckBoxNodeEditor(JTree tree) {
     this .tree = tree;
  }

   public  Object getCellEditorValue() {
    JCheckBox checkbox = renderer.getLeafRenderer();
    CheckBoxNode checkBoxNode =  new  CheckBoxNode(checkbox.getText(),
        checkbox.isSelected());
     return  checkBoxNode;
  }

   public   boolean  isCellEditable(EventObject event) {
     boolean  returnValue = false;
     if  (event  instanceof  MouseEvent) {
      MouseEvent mouseEvent = (MouseEvent) event;
      TreePath path = tree.getPathForLocation(mouseEvent.getX(),mouseEvent.getY());
       if  (path !=  null ) {
        Object node = path.getLastPathComponent();
         if  ((node !=  null ) && (node  instanceof  DefaultMutableTreeNode)) {
          DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) node;
          Object userObject = treeNode.getUserObject();
          returnValue = ((treeNode.isLeaf()) && (userObject  instanceof  CheckBoxNode));
        }
      }
    }
     return  returnValue;
  }

   public  Component getTreeCellEditorComponent(JTree tree, Object value,
       boolean  selected,  boolean  expanded,  boolean  leaf,  int  row) {

    Component editor = renderer.getTreeCellRendererComponent(tree, value,
        true, expanded, leaf, row, true);
     final   boolean  b = selected;

    // editor always selected / focused
    ItemListener itemListener =  new  ItemListener() {
       public   void  itemStateChanged(ItemEvent itemEvent)
      {
          if  (stopCellEditing())
         {
             fireEditingStopped();
         }
      }
    };
     if  (editor  instanceof  JCheckBox) {
      ((JCheckBox) editor).addItemListener(itemListener);
    }
     return  editor;
  }
}

 class  CheckBoxNode {
  String text;

   boolean  selected;

   public  CheckBoxNode(String text,  boolean  selected) {
     this .text = text;
     this .selected = selected;
  }

   public   boolean  isSelected()
  {
     return  selected;
  }

   public   void  setSelected( boolean  newValue) {
    selected = newValue;
  }

   public  String getText() {
     return  text;
  }

   public   void  setText(String newValue) {
    text = newValue;
  }

   public  String toString() {
    //return getClass().getName() + "[" + text + "/" + selected + "]";
       return  getClass().getName() + text + "/" + selected;
  }
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
tree.addTreeSelectionListener( new  TreeSelectionListener()
                        {
                             public   void  valueChanged(TreeSelectionEvent event)
                            {

//  Как здесь фиксировать изменения в дереве.
// Т.е. стоит галочка или нет?
                            }
                        });
...
Рейтинг: 0 / 0
11.01.2006, 10:01
    #33475641
GlukOza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTree -> CheckBox
Привет всем.
Обратите внимание, на вопрос, пожалуйста.
...
Рейтинг: 0 / 0
11.01.2006, 10:24
    #33475721
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTree -> CheckBox
код дерева:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
public class CheckBoxTree extends JTree {


    public CheckBoxTree() {
        super();
        init();
    }

    public CheckBoxTree(TreeModel newModel) {
        super(newModel);
        init();
    }

    private void init() {
        setCellRenderer(new CheckBoxRenderer());
        addMouseListener(new MyMouseAdapter());
    }

    private DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer();

    class CheckBoxRenderer extends JCheckBox implements TreeCellRenderer {
        public CheckBoxRenderer() {
            setOpaque(false);
        }


        public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
            if (!(value instanceof SelectableItem)) {
                return renderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
            }
            SelectableItem data = (SelectableItem) value;
            setSelected(data.isSelected());
            setText(data.getName());
            return this;
        }
    }

    class MyMouseAdapter extends MouseAdapter {
        public void mousePressed(MouseEvent e) {
            TreePath path = getPathForLocation(e.getX(), e.getY());
            //TreePath path = getClosestPathForLocation(e.getX(), e.getY());
            if (path == null) {
                return;
            }
            Object data = path.getLastPathComponent();
            if (data instanceof SelectableTopicItemData) {
                TreeModel model = getModel();
                SelectableItem selectable = (SelectableItem) data;
                if (model instanceof MenuListModel) {
                    MenuListModel mod = (MenuListModel) model;
                    mod.setSelected(selectable, !selectable.isSelected());

                }
                repaint();
            }
        }
    }
}

в код модели (MenuListModel implements TreeModel) нужно добавить метод
setSelected() и getSelectedItems():
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    public void setSelected(SelectableItem data, boolean selected) {
           data.setSelected(selected);
           //дополнительные действия
    }
    public List getSelected() {
           //к примеру, элементы хранятся в списке items;
           List res = new ArrayList();
           for (Iterator it = items.iterator(); it.hasNext();) {
                    if (data instanceof SelectableItem && ((SelectableItem)data).isSelected()) {
                        res.add(((SelectableItem)data).getItem());
                        //добавляем к результату нужный объект, а не обертку!!!
                    }
           }
           return res;
    }

код интерфейса объектов, которые следует хранить в дереве:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
public class SelectableItem {
    private boolean selected = false;
    private Object item = null;

    public SelectableTopicItemData(Object data) {
        item = data;
    }


    public boolean isSelected() {
        return selected;
    }

    public void setSelected(boolean selected) {
        this.selected = selected;
    }

    public String toString() {
        return item.toString();
    }


    public Object getItem() {
        return item;
    }
}


как использовать: создаете модель, дерево, добавляете элементы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
        MenuListModel menuListModel = new MenuListModel();
        CheckBoxTree topics = new CheckBoxTree();
        topics.setModel(menuListModel);
        Person person = new Person();
        SelectableItem item1 = new SelectableItem(person);
        menuListModel.add(item1);
        ...
        List items = menuListModel.getSelectedItems();

-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
11.01.2006, 11:59
    #33476094
Gluk'Oza
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTree -> CheckBox
Спасибо Deady за помощь.

MenuListModel implements TreeModel - класс со стандартным набором методов?
...
Рейтинг: 0 / 0
11.01.2006, 12:17
    #33476161
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JTree -> CheckBox
Gluk'Oza
> Спасибо Deady за помощь.

> MenuListModel implements TreeModel - класс со стандартным набором методов?Тема==Ответить




да. можно попробовать прикрутить DefaultMutableTreeModel, хотя я
им не пользуюсь.

-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JTree -> CheckBox / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]