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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Jtree - как опроеделить что выбран лист, а не узел 
V
    Опции темы
Killer_13
  Дата 6.8.2011, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вопрос элементарный, но что-то по синтаксису найти не могу, мне нужно чтоб кнопочка включалась только после того, как выберется какой-то лист.
Нашел как выбрать узел. - код работает, а как определить лист?
спасибо, вот код который срабатывает на выбранный узел.

Код

    @Override
    public void valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode)select.getTree().getSelectionPath().getLastPathComponent();
        if(node!=null)
            select.getStart_btn().setEnabled(true);
        
    }

PM MAIL   Вверх
jk1
Дата 6.8.2011, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Проверка вот этого условия подойдет?

Код

node.isLeaf() 



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Killer_13
Дата 6.8.2011, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

    @Override
    public void valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode)select.getTree().getSelectionPath().getLastPathComponent();
        if(node.isLeaf())
            select.getStart_btn().setEnabled(true);
        else
            select.getStart_btn().setEnabled(false);
        
    }

да, подошло, - спасибо, но!
когда кликать на плюсик(штучка которая раскрывает узел) например чтоб закрыть после выбора листа выбрасывает 
Код

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at TestSelectC.valueChanged(TestSelectC.java:66)
    at javax.swing.JTree.fireValueChanged(Unknown Source)
    at javax.swing.JTree$TreeSelectionRedirector.valueChanged(Unknown Source)
    at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(Unknown Source)
    at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(Unknown Source)
    at javax.swing.tree.DefaultTreeSelectionModel.removeSelectionPaths(Unknown Source)
    at javax.swing.JTree.removeDescendantSelectedPaths(Unknown Source)
    at javax.swing.JTree.setExpandedState(Unknown Source)
    at javax.swing.JTree.collapsePath(Unknown Source)
    at javax.swing.plaf.basic.BasicTreeUI.toggleExpandState(Unknown Source)
    at javax.swing.plaf.basic.BasicTreeUI.handleExpandControlClick(Unknown Source)
    at javax.swing.plaf.basic.BasicTreeUI.checkForClickInExpandControl(Unknown Source)
    at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(Unknown Source)
    at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(Unknown Source)

Как избавиться от этого?
PM MAIL   Вверх
jk1
Дата 6.8.2011, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Приведите пожалуйста полный код TestSelectC.java


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Killer_13
Дата 6.8.2011, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



фот
Код

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;

import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;

import model.Test;


public class TestSelectC implements ActionListener,TreeSelectionListener {

    private TestSelectV select;
    
    private Test test;
    
    public TestSelectC(TestSelectV select) {
        this.select = select;
        load();
        try {
            this.select.getTree().loadTree(Main.getUserCon().getTests());
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    
    private void load(){
        try {
            System.out.println("User" +Main.getNetCon().getUserName(Main.getSid()));
            select.getUser_name().setText(Main.getNetCon().getUserName(Main.getSid()));
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        if (select.getStart_btn() == e.getSource()) {
            getSelectedTest();
            bildUserPanel();
        }
    }
    
    private void bildUserPanel(){
        Main.getFrame().getImage_panel().remove(select);
        Main.getFrame().bildUserPanel();
        Main.getFrame().getTestPanel().getController().startTest(test);
        
    }
    
    private void getSelectedTest(){
        String catName = select.getTree().getSelectionPaths()[select.getTree().getSelectionPaths().length-1].getPath()[1].toString();
        String testName = select.getTree().getSelectionPaths()[select.getTree().getSelectionPaths().length-1].getPath()[2].toString();
        try {
            this.test = Main.getUserCon().getTest(catName, testName);
        } catch (RemoteException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public void valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode node = (DefaultMutableTreeNode)select.getTree().getSelectionPath().getLastPathComponent();
        if(node.isLeaf())
            select.getStart_btn().setEnabled(true);
        else
            select.getStart_btn().setEnabled(false);
        
    }
}








Вдруг понадобиться
TestSelectV.java
Код

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class TestSelectV extends JPanel {

    private static final long serialVersionUID = 1L;

    private JLabel user_name;

    private JButton start_btn;

    private TestTree tree;

    private TestSelectC controller;

    public TestSelectV(int w, int h) {

        init(w, h);
    }

    private void init(int w, int h) {
        this.setPreferredSize(new Dimension(w, h));
        this.setMinimumSize(new Dimension(w, h));
        this.setOpaque(false);
        testPanel(w, h);
        controller = new TestSelectC(this);
        this.start_btn.addActionListener(controller);
        this.tree.addTreeSelectionListener(controller);
    }

    private void testPanel(int w, int h) {

        JPanel temp = new JPanel();

        Box box = Box.createVerticalBox();
        Box nameBox = Box.createVerticalBox();

        JLabel n1 = new JLabel("Auswertungstool");
        JLabel n2 = new JLabel("       für");
        JLabel n3 = new JLabel("     Umfrage");

        JPanel test_panel = new JPanel(new BorderLayout());
        JPanel user_panel = new JPanel(new FlowLayout());
        JLabel user_lbl = new JLabel("User:");

        user_name = new JLabel("");
        start_btn = new JButton("Start");
        tree = new TestTree();

        JScrollPane pane = new JScrollPane(tree);

        n1.setFont(new Font("Consolas", Font.BOLD, 24));
        n2.setFont(new Font("Consolas", Font.BOLD, 24));
        n3.setFont(new Font("Consolas", Font.BOLD, 24));

        user_lbl.setFont(new Font("Consolas", Font.BOLD, 24));
        user_lbl.setForeground(new Color(50, 100, 100));

        user_name.setFont(new Font("Consolas", Font.BOLD, 24));
        user_name.setForeground(new Color(50, 100, 100));

        test_panel.setOpaque(false);
        user_panel.setOpaque(false);
        temp.setOpaque(false);

        test_panel.setPreferredSize(new Dimension(w, 440));
        
        start_btn.setEnabled(false);

        user_panel.add(user_lbl);
        user_panel.add(user_name);
        
        nameBox.add(n1);
        nameBox.add(Box.createVerticalStrut(3));
        nameBox.add(n2);
        nameBox.add(Box.createVerticalStrut(3));
        nameBox.add(n3);

        temp.add(nameBox);

        test_panel.add(pane, BorderLayout.CENTER);
        test_panel.add(start_btn, BorderLayout.SOUTH);
        test_panel.add(user_panel, BorderLayout.NORTH);

        box.add(temp);
        box.add(Box.createVerticalStrut(3));
        box.add(test_panel);

        this.add(box);
    }

    public JLabel getUser_name() {
        return user_name;
    }

    public JButton getStart_btn() {
        return start_btn;
    }

    public TestTree getTree() {
        return tree;
    }
}



TestTree.java

Код

import java.awt.BorderLayout;
import java.awt.Color;

import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import java.util.*;
import model.*;

public class TestTree extends JTree {

    private static final long serialVersionUID = 1L;

    private Hashtable<Object, Object> tests;

    private DefaultTreeModel defaultModel;

    private DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");

    public TestTree() {
        this.setLayout(new BorderLayout());
    }

    public void loadTree(Hashtable<String, Hashtable<String, Test>> tests) {

        this.root.removeAllChildren();
        defaultModel = new DefaultTreeModel(this.root);
        this.tests = new Hashtable<Object, Object>(tests);
        JTree.DynamicUtilTreeNode.createChildren(this.root, this.tests);
        this.setModel(defaultModel);
        this.setBackground(new Color(207,215,218));
        this.setRootVisible(false);
        this.setOpaque(true);
    }
}

PM MAIL   Вверх
dorogoyIV
Дата 7.8.2011, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

  if(node != null && node.isLeaf()) // тут важна последовательность - сначала проверка на нуль
   ...


Это сообщение отредактировал(а) dorogoyIV - 7.8.2011, 09:13
PM MAIL   Вверх
Killer_13
Дата 7.8.2011, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



:( К сожалению ничего не изменилось. :(
как и было, все срабатывает, - выбрал лист - кнопка включилась, выбрал узел кнопка отключилась, после выбора листа если кликнуть на плюсик, валится.
Код

 CLIENT
fb0cb5ccabe669d5a33258a3dbf1fae
Userw
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at TestSelectC.valueChanged(TestSelectC.java:66)
    at javax.swing.JTree.fireValueChanged(Unknown Source)
    at javax.swing.JTree$TreeSelectionRedirector.valueChanged(Unknown Source)
    at javax.swing.tree.DefaultTreeSelectionModel.fireValueChanged(Unknown Source)
    at javax.swing.tree.DefaultTreeSelectionModel.notifyPathChange(Unknown Source)
    at javax.swing.tree.DefaultTreeSelectionModel.removeSelectionPaths(Unknown Source)
    at javax.swing.JTree.removeDescendantSelectedPaths(Unknown Source)
    at javax.swing.JTree.setExpandedState(Unknown Source)
    at javax.swing.JTree.collapsePath(Unknown Source)
    at javax.swing.plaf.basic.BasicTreeUI.toggleExpandState(Unknown Source)
    at javax.swing.plaf.basic.BasicTreeUI.handleExpandControlClick(Unknown Source)
    at javax.swing.plaf.basic.BasicTreeUI.checkForClickInExpandControl(Unknown Source)
    at javax.swing.plaf.basic.BasicTreeUI$Handler.handleSelection(Unknown Source)
    at javax.swing.plaf.basic.BasicTreeUI$Handler.mousePressed(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)


Этого при загрузке gui видно не будет вроде бы, но всеравно...
интересно без ошибок все сделать.

Спасибо з помощь. smile
PM MAIL   Вверх
jk1
Дата 7.8.2011, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

(DefaultMutableTreeNode)select.getTree().getSelectionPath()


Проверьте это на null прежде чем вызывать у него getLastPathComponent();


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
dorogoyIV
Дата 8.8.2011, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

  DefaultMutableTreeNode node =
     (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();

  if(node != null && node.isLeaf())
   ...

PM MAIL   Вверх
Killer_13
Дата 8.8.2011, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Работает, вопрос решен.
Спасибо!

Код

    public void valueChanged(TreeSelectionEvent e) {
        DefaultMutableTreeNode node;
        if (select.getTree().getSelectionPath() != null) {
            node = (DefaultMutableTreeNode) select.getTree().getSelectionPath()
                    .getLastPathComponent();
            if (node != null && node.isLeaf())
                select.getStart_btn().setEnabled(true);
            else
                select.getStart_btn().setEnabled(false);
        }

    }

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


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

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