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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JTree, функция mark/unmark folder 
:(
    Опции темы
snorkee
Дата 16.3.2005, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



мне нужно прикрутить к Java Tree функцию mark/unmark folder. Чтоб когда я правой клавишей кликну на символ folder'a иконка у меня заменилась на новую иконку (точно такая же, но с нарисованным на ней крестиком) и путь к этой папке сохранился в переменную и т.д.

У меня есть кусок текста где программа судь по расширению файла или если это директория ставит заданную мной иконку. По идее надо ActionListener к этой иконке прикручивать, я прав? Попробовал кучу всяких способов но всё равно не получилось...

Код

import java.awt.*;
import java.io.*;
import javax.swing.*;
import javax.swing.tree.*;
 
public class Tree extends JPanel {



     static JTree tree;
     private static boolean useSystemLookAndFeel = true;

     static DefaultTreeCellRenderer render;
     
     public Tree() {
      
          super();
          setLayout(new GridLayout());

          try {
            UIManager.setLookAndFeel(
               UIManager.getSystemLookAndFeelClassName());
           } catch (Exception e) {
            System.err.println("Couldn't use system look and feel.");
          }
          
           JScrollPane scrollPane = new JScrollPane();

           add(scrollPane);

        // scrollPane.setSize(900, 900);
     
        
          
           File start = new File("E:\\Archive\\");
           TreeModel model = new DefaultTreeModel(new CreateNode(start));
  
           tree = new JTree(model);
           tree.setCellRenderer(new NodeRenderer());
           tree.setShowsRootHandles(true);

           scrollPane.setViewportView(tree);
          
      }
      
      public static void main(String args[]) {
           
           Tree browse = new Tree();
           JFrame frame = new JFrame();
           frame.getContentPane().add(browse, BorderLayout.CENTER);
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           frame.setSize(300,500);
           frame.setLocationRelativeTo(null);
           frame.setVisible(true);
      }
 }
  
 class CreateNode extends DefaultMutableTreeNode {
   
     CreateNode(File dir){
         super(dir);
         fillChildren(dir);
     }
     void fillChildren(File dir){
         String[] list = dir.list();
         if( list == null ){
             return;
         }
         for(int i=0; i<list.length; ++i){
             File child = new File(dir, list[i]);
            if(child.isDirectory()){
                add(new CreateNode(child));


            }
            if(child.isFile()) {
                 add(new CreateNode(child));      
            }
        }
     }
 }


//-----------------------------------------------------------------------------

// ТА ЧАСТЬ КОДА, где я занимаюсь обработкой того в каких случаях какая иконка будет появляться.

//-----------------------------------------------------------------------------
class NodeRenderer extends DefaultTreeCellRenderer 
{

  private Icon file1 = new ImageIcon("icons/Documents.png");
  private Icon file2 = new ImageIcon("icons/Folder.png");
  private Icon file3 = new ImageIcon("icons/Pencil.png");
  private Icon file4 = new ImageIcon("icons/Music.png");
  private Icon file5 = new ImageIcon("icons/Text.png");
  private Icon file6 = new ImageIcon("icons/Window.png");
  private Icon file7 = new ImageIcon("icons/Movie.png");
  private Icon file8 = new ImageIcon("icons/Earth.png");
 
  public Component getTreeCellRendererComponent(JTree tree, Object value,
               boolean sel, boolean expanded, boolean leaf, int row,
               boolean hasFocus) {
 
          super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf,
                    row, hasFocus);
     
          DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
          File file = (File) node.getUserObject();
          String name = file.getName();
          setText(name);

          
          if (name.endsWith(".gif")||name.endsWith(".jpg")||name.endsWith(".jpeg")) {
               setIcon(file3);
          } else if (file.isDirectory()) {    
          setIcon(file2);
          } else if (name.endsWith(".mp3")) {
            setIcon(file4);
          }else if (name.endsWith(".txt") || name.endsWith(".doc")) {
            setIcon(file5);
          }else if (name.endsWith(".exe")) {
            setIcon(file6);
          }else if (name.endsWith(".avi")||name.endsWith(".mpg")||name.endsWith(".mpeg")) {
            setIcon(file7);
          }else if (name.endsWith(".htm")||name.endsWith(".html")||name.endsWith(".php")) {
            setIcon(file8);
          }else {
               setIcon(file1);
          }
          return this;
     }
     public NodeRenderer() {
          super();
     }
    
}


PM MAIL WWW ICQ MSN   Вверх
Domestic Cat
Дата 17.3.2005, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

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



RTFM
http://java.sun.com/j2se/1.4.2/docs/api/ja...wing/JTree.html
Код

 // If you are interested in detecting either double-click events or when a user clicks on a node, 
// regardless of whether or not it was selected, we recommend you do the following:

 final JTree tree = ...;

 MouseListener ml = new MouseAdapter() {
     public void mousePressed(MouseEvent e) {
         int selRow = tree.getRowForLocation(e.getX(), e.getY());
         TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
         if(selRow != -1) {
             if(e.getClickCount() == 1) {
                 mySingleClick(selRow, selPath);
             }
             else if(e.getClickCount() == 2) {
                 myDoubleClick(selRow, selPath);
             }
         }
     }
 };
tree.addMouseListener(ml);

smile


--------------------

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


Новичок



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

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



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

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

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


 




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


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

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