Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Не берет созданный JTree, показывает стандартный.


Автор: Killer_13 16.7.2011, 16:54
Здравствуйте, Вопрос такого плана.
Не понимаю почему не берет мое созданное дерево, пример взял из книги, ставлю свой класс, а вместо своего дерева мне показывает стандартное!
В чем фишка?

Вызываю свой класс которой расширяет JTree

Код

JPanel test_panel = new JPanel(new BorderLayout());
V_Test_Tree tree = new V_Test_Tree();
test_panel.add(tree, BorderLayout.CENTER);


V_Test_Tree.class
Код

import java.util.ArrayList;

import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;

public class V_Test_Tree extends JTree {
    // дерево на основе нашей модели
    public V_Test_Tree() {
        JPanel tree_panel = new JPanel();
        JTree tree = new JTree(new SimpleModel());

        tree_panel.add(new JScrollPane(tree));

        add(tree_panel);
    }
}

// наша модель для дерева
class SimpleModel implements TreeModel {

    // корень дерева и основные узлы
    private String root = "Кое-что интересное";

    private String colors = "Цвета", food = "Еда";

    // хранилища данных
    private ArrayList rootList = new ArrayList(), colorsList = new ArrayList(),
            foodList = new ArrayList();

    public SimpleModel() {
        // заполняем списки данными
        rootList.add(colors);
        rootList.add(food);
        colorsList.add("Красный");
        colorsList.add("Зеленый");
        foodList.add("Мороженое");
        foodList.add("Бутерброд");
    }

    // возвращает корень дерева
    @Override
    public Object getRoot() {
        return root;
    }

    // возвращает потомка узла по порядковому номеру
    @Override
    public Object getChild(Object parent, int index) {
        if (parent == root)
            return rootList.get(index);
        else if (parent == colors)
            return colorsList.get(index);
        else if (parent == food)
            return foodList.get(index);
        return null;
    }

    // сообщает о количестве потомков узла
    @Override
    public int getChildCount(Object parent) {
        if (parent == root)
            return rootList.size();
        else if (parent == colors)
            return colorsList.size();
        else if (parent == food)
            return foodList.size();
        return 0;
    }

    // определяет, какие узлы являются листьями
    @Override
    public boolean isLeaf(Object node) {
        if (colorsList.contains(node) || foodList.contains(node))
            return true;
        else
            return false;
    }

    // позволяет получить порядковый номер потомка
    @Override
    public int getIndexOfChild(Object parent, Object child) {
        if (parent == root)
            return rootList.indexOf(child);
        else if (parent == colors)
            return colorsList.indexOf(child);
        else if (parent == food)
            return foodList.indexOf(child);
        return 0;
    }

    @Override
    public void valueForPathChanged(TreePath path, Object newValue) {
        // TODO Auto-generated method stub

    }

    @Override
    public void addTreeModelListener(TreeModelListener l) {
        // TODO Auto-generated method stub

    }

    @Override
    public void removeTreeModelListener(TreeModelListener l) {
        // TODO Auto-generated method stub

    }
}




Спасибо

Автор: dorogoyIV 17.7.2011, 05:39
Код

public class V_Test_Tree extends JPanel //JTree
{
 // дерево на основе нашей модели
 public V_Test_Tree()
 {
//  JPanel tree_panel = new JPanel();
  JTree tree = new JTree(new SimpleModel());
//  tree_panel.add(new JScrollPane(tree));
setLayout(new BorderLayout());
add(new JScrollPane(tree));
//  add(tree_panel);
 }
}

Автор: Killer_13 17.7.2011, 21:09
Интересно получается. Когда ваш код, все работает, только ставит снизу белую подложку, - ее мне не нужно, как только убираю строку 
Код

setLayout(new BorderLayout());

Лупит дерево по умолчанию.
В BorderLayout нету свойства setOpaque(false)? Или как мне убрать белую подложку?
Спас.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)