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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Меню в jTree 
:(
    Опции темы
XClan
Дата 13.1.2004, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно ли создать конт.меню при нажати на правую кнопку мышки в jTree ?
Если да , то как?


--------------------
rm -rf /bin/laden
PM MAIL WWW   Вверх
DarkDS
Дата 13.1.2004, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Можно... smile.gif
Самый простой способ:
Код
 JTree tree = new JTree();
 tree.addMouseListener( new MouseAdapter()
 {
  public void mouseReleased(MouseEvent e)
  {
   if ( e.isPopupTrigger() )
   {
    JPopupMenu menu = new JPopupMenu();
    menu.add( new JMenuItem("Test1") );
    menu.add( new JMenuItem("Test2") );
    menu.add( new JMenuItem("Test3") );
    menu.show( e.getComponent(), e.getX(), e.getY() );
   }
  }
 } );


Это сообщение отредактировал(а) DarkDS - 13.1.2004, 13:23
PM MAIL   Вверх
Unregistered
Дата 13.1.2004, 13:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А спасибо скажу я smile.gif)
  Вверх
AntonSaburov
Дата 13.1.2004, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


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

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



Я просто в восторге был от этого примера из книги (ссылку можно найти в коллекции ссылок по JAVA - "Swing" by Matthew Robinson and Pavel Vorobiev)
(Файлы с картинками не привожу - даже так работает)

Код

/**
*  Copyright 1999-2002 Matthew Robinson and Pavel Vorobiev.
*  All Rights Reserved.
*
*  ===================================================
*  This program contains code from the book "Swing"
*  2nd Edition by Matthew Robinson and Pavel Vorobiev
*  http://www.spindoczine.com/sbe
*  ===================================================
*
*  The above paragraph must be included in full, unmodified
*  and completely intact in the beginning of any source code
*  file that references, copies or uses (in any way, shape
*  or form) code contained in this file.
*/

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;

import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.event.*;
import javax.swing.border.*;

public class DirTree extends JFrame
{

   public static final String APP_NAME = "Directories Tree";

   public static final ImageIcon ICON_COMPUTER =
       new ImageIcon("computer.gif");
   public static final ImageIcon ICON_DISK =
       new ImageIcon("disk.gif");
   public static final ImageIcon ICON_FOLDER =
       new ImageIcon("folder.gif");
   public static final ImageIcon ICON_EXPANDEDFOLDER =
       new ImageIcon("expandedfolder.gif");

   protected JTree m_tree;
   protected DefaultTreeModel m_model;
   protected JTextField m_display;

   protected DefaultTreeCellEditor m_editor;
   protected FileNode m_editingNode;
   protected JPopupMenu m_popup;
   protected Action m_expandAction;
   protected TreePath m_clickedPath;

   public DirTree()
   {
       super(APP_NAME);
       setSize(400, 300);

       DefaultMutableTreeNode top = new DefaultMutableTreeNode(
           new IconData(ICON_COMPUTER, null, "Computer"));

       DefaultMutableTreeNode node;
       File[] roots = File.listRoots();
       for (int k = 0; k < roots.length; k++)
       {
           node = new DefaultMutableTreeNode(new IconData(ICON_DISK,
               null, new FileNode(roots[k])));
           top.add(node);
           node.add(new DefaultMutableTreeNode(new Boolean(true)));
       }

       m_model = new DefaultTreeModel(top);
       m_tree = new JTree(m_model)
       {
           public boolean isPathEditable(TreePath path)
           {
               if (path == null || path.getPathCount() < 3) // Skip first two levels
               {
                   return false;
               }
               FileNode node = getFileNode(getTreeNode(path));
               if (node == null)
               {
                   return false;
               }
               File dir = node.getFile();
               if (dir != null && dir.isDirectory())
               {
                   m_editingNode = node;
                   return true;
               }
               return false;
           }

           // NEW
           public String getToolTipText(MouseEvent ev)
           {
               if (ev == null)
               {
                   return null;
               }
               TreePath path = m_tree.getPathForLocation(ev.getX(),
                   ev.getY());
               if (path != null)
               {
                   FileNode fnode = getFileNode(getTreeNode(path));
                   if (fnode == null)
                   {
                       return null;
                   }
                   File f = fnode.getFile();
                   return (f == null ? null : f.getPath());
               }
               return null;
           }
       };
       ToolTipManager.sharedInstance().registerComponent(m_tree); // important

       m_tree.putClientProperty("JTree.lineStyle", "Angled");

       IconCellRenderer renderer = new
           IconCellRenderer();
       m_tree.setCellRenderer(renderer);

       m_tree.addTreeExpansionListener(new
                                       DirExpansionListener());

       m_tree.addTreeSelectionListener(new
                                       DirSelectionListener());

       m_tree.getSelectionModel().setSelectionMode(
           TreeSelectionModel.SINGLE_TREE_SELECTION);
       m_tree.setShowsRootHandles(true);

       JScrollPane s = new JScrollPane();
       s.getViewport().add(m_tree);
       getContentPane().add(s, BorderLayout.CENTER);

       CellEditorListener cel = new CellEditorListener()
       {
           public void editingStopped(ChangeEvent e)
           {
               if (m_editingNode != null)
               {
                   String newName = m_editor.getCellEditorValue().toString();
                   File dir = m_editingNode.getFile();
                   File newDir = new File(dir.getParentFile(), newName);
                   dir.renameTo(newDir);
                   // Update tree
                   TreePath path = m_tree.getSelectionPath();
                   DefaultMutableTreeNode node = getTreeNode(path);
                   IconData idata = new IconData(DirTree.ICON_FOLDER,
                                                 DirTree.ICON_EXPANDEDFOLDER, new FileNode(newDir));
                   node.setUserObject(idata);
                   m_model.nodeStructureChanged(node);
                   m_display.setText(newDir.getAbsolutePath());
               }
               m_editingNode = null;
           }

           public void editingCanceled(ChangeEvent e)
           {
               m_editingNode = null;
           }
       };
       m_editor = new DefaultTreeCellEditor(m_tree, renderer);
       m_editor.addCellEditorListener(cel);
       m_tree.setCellEditor(m_editor);
       m_tree.setEditable(true);

       JToolBar tb = new JToolBar();
       tb.setFloatable(false);
       m_display = new JTextField();
       m_display.setEditable(false);
       m_display.setBorder(new SoftBevelBorder(BevelBorder.LOWERED));
       tb.add(m_display);
       tb.addSeparator();

       m_popup = new JPopupMenu();
       m_expandAction = new AbstractAction()
       {
           public void actionPerformed(ActionEvent e)
           {
               if (m_clickedPath == null)
               {
                   return;
               }
               if (m_tree.isExpanded(m_clickedPath))
               {
                   m_tree.collapsePath(m_clickedPath);
               }
               else
               {
                   m_tree.expandPath(m_clickedPath);
               }
           }
       };
       m_popup.add(m_expandAction);
       m_popup.addSeparator();

       Action a1 = new AbstractAction("Create", new ImageIcon("New16.gif"))
       {
           public void actionPerformed(ActionEvent e)
           {
               m_tree.repaint();
               TreePath path = m_tree.getSelectionPath();
               if (path == null || path.getPathCount() < 2)
               {
                   return;
               }
               DefaultMutableTreeNode treeNode = getTreeNode(path);
               FileNode node = getFileNode(treeNode);
               if (node == null)
               {
                   return;
               }

               File dir = node.getFile();
               int index = 0;
               File newDir = new File(dir, "New Directory");
               while (newDir.exists())
               {
                   index++;
                   newDir = new File(dir, "New Directory" + index);
               }
               newDir.mkdirs();

               IconData idata = new IconData(DirTree.ICON_FOLDER,
                                             DirTree.ICON_EXPANDEDFOLDER, new FileNode(newDir));
               DefaultMutableTreeNode newNode = new
                   DefaultMutableTreeNode(idata);
               treeNode.add(newNode);
               m_model.nodeStructureChanged(treeNode);

               path = path.pathByAddingChild(newNode);
               System.out.println("path=" + path);
               m_tree.scrollPathToVisible(path);
               m_tree.startEditingAtPath(path);
           }
       };
       m_popup.add(a1);
       JButton bt = tb.add(a1);
       bt.setToolTipText("Create new directory");

       Action a2 = new AbstractAction("Delete", new ImageIcon("Delete16.gif"))
       {
           public void actionPerformed(ActionEvent e)
           {
               m_tree.repaint();
               TreePath path = m_tree.getSelectionPath();
               if (path == null || path.getPathCount() < 3)
               {
                   return;
               }
               DefaultMutableTreeNode treeNode = getTreeNode(path);
               FileNode node = getFileNode(treeNode);
               if (node == null)
               {
                   return;
               }
               File dir = node.getFile();
               if (dir != null && dir.isDirectory())
               {
                   if (JOptionPane.showConfirmDialog(DirTree.this,
                       "Do you want to delete \ndirectory \"" + dir.getName() + "\" ?",
                       DirTree.APP_NAME, JOptionPane.YES_NO_OPTION)
                       != JOptionPane.YES_OPTION)
                   {
                       return;
                   }

                   setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
                   deleteDirectory(dir);
                   setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));

                   TreeNode parent = treeNode.getParent();
                   treeNode.removeFromParent();
                   m_model.nodeStructureChanged(parent);
                   m_display.setText("");
               }
           }
       };
       m_popup.add(a2);
       bt = tb.add(a2);
       bt.setToolTipText("Delete directory");
       m_tree.registerKeyboardAction(a2,
                                     KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),
                                     JComponent.WHEN_FOCUSED);

       Action a3 = new AbstractAction("Rename", new ImageIcon("Edit16.gif"))
       {
           public void actionPerformed(ActionEvent e)
           {
               m_tree.repaint();
               TreePath path = m_tree.getSelectionPath();
               if (path == null)
               {
                   return;
               }
               m_tree.scrollPathToVisible(path);
               m_tree.startEditingAtPath(path);
           }
       };
       m_popup.add(a3);
       bt = tb.add(a3);
       bt.setToolTipText("Rename directory");

       getContentPane().add(tb, BorderLayout.NORTH);
       m_tree.add(m_popup);
       m_tree.addMouseListener(new PopupTrigger());
   }

   DefaultMutableTreeNode getTreeNode(TreePath path)
   {
       return (DefaultMutableTreeNode)(path.getLastPathComponent());
   }

   FileNode getFileNode(DefaultMutableTreeNode node)
   {
       if (node == null)
       {
           return null;
       }
       Object obj = node.getUserObject();
       if (obj instanceof IconData)
       {
           obj = ((IconData)obj).getObject();
       }
       if (obj instanceof FileNode)
       {
           return (FileNode)obj;
       }
       else
       {
           return null;
       }
   }

   class PopupTrigger extends MouseAdapter
   {

       public void mouseReleased(MouseEvent e)
       {
           if (e.isPopupTrigger())
           {
               int x = e.getX();
               int y = e.getY();
               TreePath path = m_tree.getPathForLocation(x, y);
               if (path == null)
               {
                   return;
               }

               if (m_tree.isExpanded(path))
               {
                   m_expandAction.putValue(Action.NAME, "Collapse");
               }
               else
               {
                   m_expandAction.putValue(Action.NAME, "Expand");

               }
               m_tree.setSelectionPath(path);
               m_tree.scrollPathToVisible(path);
               m_popup.show(m_tree, x, y);
               m_clickedPath = path;
           }
       }
   }

   // Make sure expansion is threaded and updating the tree model
   // only occurs within the event dispatching thread.
   class DirExpansionListener implements TreeExpansionListener
   {

       public void treeExpanded(TreeExpansionEvent event)
       {

           final DefaultMutableTreeNode node = getTreeNode(
               event.getPath());
           final FileNode fnode = getFileNode(node);

           Thread runner = new Thread()
           {
               public void run()
               {
                   if (fnode != null && fnode.expand(node))
                   {
                       Runnable runnable = new Runnable()
                       {
                           public void run()
                           {
                               m_model.reload(node);
                           }
                       };
                       SwingUtilities.invokeLater(runnable);
                   }
               }
           };
           runner.start();
       }

       public void treeCollapsed(TreeExpansionEvent event)
       {}
   }

   class DirSelectionListener implements TreeSelectionListener
   {

       public void valueChanged(TreeSelectionEvent event)
       {
           DefaultMutableTreeNode node = getTreeNode(
               event.getPath());
           FileNode fnode = getFileNode(node);
           if (fnode != null)
           {
               m_display.setText(fnode.getFile().
                                 getAbsolutePath());
           }
           else
           {
               m_display.setText("");
           }
       }
   }

   public static void deleteDirectory(File dir)
   {
       if (dir == null || !dir.isDirectory() || dir.isHidden())
       {
           return;
       }
       File[] files = dir.listFiles();
       if (files != null)
       {
           for (int k = 0; k < files.length; k++)
           {
               File f = files[k];
               if (f.isDirectory())
               {
                   deleteDirectory(f);
               }
               else
               {
                   f.delete();
               }
           }
       }
       dir.delete();
   }

   public static void main(String argv[])
   {
       DirTree frame = new DirTree();
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setVisible(true);
   }
}

class IconCellRenderer extends DefaultTreeCellRenderer
{

   public IconCellRenderer()
   {
       setLeafIcon(null);
       setOpenIcon(null);
   }

   public Component getTreeCellRendererComponent(JTree tree,
                                                 Object value, boolean sel, boolean expanded, boolean leaf,
                                                 int row, boolean hasFocus)
   {

       // Invoke default implementation
       Component result = super.getTreeCellRendererComponent(tree,
           value, sel, expanded, leaf, row, hasFocus);

       DefaultMutableTreeNode node =
           (DefaultMutableTreeNode)value;
       Object obj = node.getUserObject();
       setText(obj.toString());

       if (obj instanceof Boolean)
       {
           setText("Retrieving data...");

       }
       if (obj instanceof IconData)
       {
           IconData idata = (IconData)obj;
           if (expanded)
           {
               setIcon(idata.getExpandedIcon());
           }
           else
           {
               setIcon(idata.getIcon());
           }
       }
       else
       {
           setIcon(null);

       }
       return result;
   }
}

class IconData
{
   protected Icon m_icon;
   protected Icon m_expandedIcon;
   protected Object m_data;

   public IconData(Icon icon, Object data)
   {
       m_icon = icon;
       m_expandedIcon = null;
       m_data = data;
   }

   public IconData(Icon icon, Icon expandedIcon, Object data)
   {
       m_icon = icon;
       m_expandedIcon = expandedIcon;
       m_data = data;
   }

   public Icon getIcon()
   {
       return m_icon;
   }

   public Icon getExpandedIcon()
   {
       return m_expandedIcon != null ? m_expandedIcon : m_icon;
   }

   public Object getObject()
   {
       return m_data;
   }

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

class FileNode
{
   protected File m_file;

   public FileNode(File file)
   {
       m_file = file;
   }

   public File getFile()
   {
       return m_file;
   }

   public String toString()
   {
       return m_file.getName().length() > 0 ? m_file.getName() :
           m_file.getPath();
   }

   // Alternatively we copud sub-class TreeNode
   public boolean expand(DefaultMutableTreeNode parent)
   {
       DefaultMutableTreeNode flag =
           (DefaultMutableTreeNode)parent.getFirstChild();
       if (flag == null) // No flag
       {
           return false;
       }
       Object obj = flag.getUserObject();
       if (!(obj instanceof Boolean))
       {
           return false; // Already expanded
       }

       parent.removeAllChildren(); // Remove Flag

       File[] files = listFiles();
       if (files == null)
       {
           return true;
       }

       Vector v = new Vector();

       for (int k = 0; k < files.length; k++)
       {
           File f = files[k];
           if (!(f.isDirectory()))
           {
               continue;
           }

           FileNode newNode = new FileNode(f);

           boolean isAdded = false;
           for (int i = 0; i < v.size(); i++)
           {
               FileNode nd = (FileNode)v.elementAt(i);
               if (newNode.compareTo(nd) < 0)
               {
                   v.insertElementAt(newNode, i);
                   isAdded = true;
                   break;
               }
           }
           if (!isAdded)
           {
               v.addElement(newNode);
           }
       }

       for (int i = 0; i < v.size(); i++)
       {
           FileNode nd = (FileNode)v.elementAt(i);
           IconData idata = new IconData(DirTree.ICON_FOLDER,
                                         DirTree.ICON_EXPANDEDFOLDER, nd);
           DefaultMutableTreeNode node = new
               DefaultMutableTreeNode(idata);
           parent.add(node);

           if (nd.hasSubDirs())
           {
               node.add(new DefaultMutableTreeNode(
                   new Boolean(true)));
           }
       }

       return true;
   }

   public boolean hasSubDirs()
   {
       File[] files = listFiles();
       if (files == null)
       {
           return false;
       }
       for (int k = 0; k < files.length; k++)
       {
           if (files[k].isDirectory())
           {
               return true;
           }
       }
       return false;
   }

   public int compareTo(FileNode toCompare)
   {
       return m_file.getName().compareToIgnoreCase(
           toCompare.m_file.getName());
   }

   protected File[] listFiles()
   {
       if (!m_file.isDirectory())
       {
           return null;
       }
       try
       {
           return m_file.listFiles();
       }
       catch (Exception ex)
       {
           JOptionPane.showMessageDialog(null,
                                         "Error reading directory " + m_file.getAbsolutePath(),
                                         DirTree.APP_NAME, JOptionPane.WARNING_MESSAGE);
           return null;
       }
   }
}

PM MAIL WWW ICQ   Вверх
XClan
Дата 13.1.2004, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо! Правда у меня он что-то не сработал!
Не выпадает меню sad.gif


--------------------
rm -rf /bin/laden
PM MAIL WWW   Вверх
DarkDS
Дата 13.1.2004, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Какой вариант?
PM MAIL   Вверх
XClan
Дата 13.1.2004, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Твой!
Я написал так:
Код

private void jTree1MouseReleased(java.awt.event.MouseEvent evt) {
       // Add your handling code here:
       DefaultTreeModel model = (DefaultTreeModel)jTree1.getModel();
       DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                        jTree1.getLastSelectedPathComponent();
     if (rootNode == null) return;
       Object object = node.getUserObject();
       if ( node.getLevel()==1 ) {
       if ( evt.isPopupTrigger() )
  {
   JPopupMenu menu = new JPopupMenu();
   menu.add( new JMenuItem("Stop") );
   menu.add( new JMenuItem("Start") );
   menu.add( new JMenuItem("Status") );
   menu.show( evt.getComponent(), evt.getX(), evt.getY() );
  };
       }
   }

----
У AntonSaburov пример очень неплохой, я чуть было случайно не удалил каталог из-за отсутствия картинок ;)
Но выпадающего меню и там не нашёл!



--------------------
rm -rf /bin/laden
PM MAIL WWW   Вверх
DarkDS
Дата 14.1.2004, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Попробуй без этого кода... Вообще показывается меню или нет?
smile.gif
DefaultTreeModel model = (DefaultTreeModel)jTree1.getModel();
DefaultMutableTreeNode node = (DefaultMutableTreeNode)
jTree1.getLastSelectedPathComponent();
if (rootNode == null) return;
Object object = node.getUserObject();
if ( node.getLevel()==1 ) {

PM MAIL   Вверх
Бекетов Роман aka Yaiu
Дата 14.1.2004, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пример хороший !
У меня все работало и меню тоже smile.gif
PM MAIL   Вверх
XClan
Дата 14.1.2004, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Благодаря AntonSaburov получилось разобраться!
На всякий случай выложу его код, может для других он будет полезен!
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class My extends JFrame
{
   JTree m_tree = null;
   JPopupMenu m_popup = null;
   public My()
   {
       getContentPane().setLayout(new BorderLayout());
       m_tree = new JTree();
       m_popup = new JPopupMenu();
       m_popup.add("Stop");
       m_popup.add("Start");
       m_popup.add("Status");
       m_tree.add(m_popup);
       m_tree.addMouseListener(new PopupTrigger());
       getContentPane().add(new JScrollPane(m_tree));
       setBounds(100,100,200,300);  
   }
   class PopupTrigger extends MouseAdapter
   {        
       public void mouseReleased(MouseEvent e)
       {
           int y = e.getY();
           int x = e.getX();
       
           m_popup.show(m_tree, y, x);
       }
   }
   public static void main(String[] args)
   {
       My my = new My();
       my.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       my.setVisible(true);
   }
}

Сейчас у меня встал вопрос насчет того как реализовать данный код, чтобы именно правой кнопкой мышки вызвать конт.меню в дереве, а не случайным кликом по дереву!
Что-то типа MOUSE_RELEASED/MOUSE_CLICKED для BUTTON2_MASK;
-----------
Thanks!


--------------------
rm -rf /bin/laden
PM MAIL WWW   Вверх
DarkDS
Дата 14.1.2004, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(XClan @ 14.1.2004, 12:28)
Благодаря AntonSaburov получилось разобраться!
На всякий случай выложу его код, может для других он будет полезен!
Код

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class My extends JFrame
{
   JTree m_tree = null;
   JPopupMenu m_popup = null;
   public My()
   {
       getContentPane().setLayout(new BorderLayout());
       m_tree = new JTree();
       m_popup = new JPopupMenu();
       m_popup.add("Stop");
       m_popup.add("Start");
       m_popup.add("Status");
       m_tree.add(m_popup);
       m_tree.addMouseListener(new PopupTrigger());
       getContentPane().add(new JScrollPane(m_tree));
       setBounds(100,100,200,300);  
   }
   class PopupTrigger extends MouseAdapter
   {        
       public void mouseReleased(MouseEvent e)
       {
           int y = e.getY();
           int x = e.getX();
       
           m_popup.show(m_tree, y, x);
       }
   }
   public static void main(String[] args)
   {
       My my = new My();
       my.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       my.setVisible(true);
   }
}

Сейчас у меня встал вопрос насчет того как реализовать данный код, чтобы именно правой кнопкой мышки вызвать конт.меню в дереве, а не случайным кликом по дереву!
Что-то типа MOUSE_RELEASED/MOUSE_CLICKED для BUTTON2_MASK;
-----------
Thanks!

1. Почти то же самое, что и у меня smile.gif
2. На правую клавишу (и на нажатие соотвесвующих комбинация на клаве) есть e.isPopupTrigger()

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


Опытный
**


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

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



Да? У меня и правая и левая кнопка мышки вызывает при нажатии на дереве, что не очень удобно! А чтобы только правая , то есть вторая кнопка никак!?


--------------------
rm -rf /bin/laden
PM MAIL WWW   Вверх
DarkDS
Дата 14.1.2004, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Просто в примере AntonSaburov-а на любое нажатие мыши будет выскакивать меню (там нет проверок на попап)
в твоем случае нужно так:
Код

  class PopupTrigger extends MouseAdapter
  {        
      public void mouseReleased(MouseEvent e)
      {
             if ( e.isPopupTrigger() )
             {
                    int y = e.getY();
                    int x = e.getX();
       
                    m_popup.show(m_tree, y, x);
             }
      }
  }

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


Опытный
**


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

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



Уф! Получилось ! Просто в IDE редакторе чуток по другому код впихивать мне надо было!


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

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

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


 




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


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

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