Щелкнуть правой кнопкой по контекстному меню для Java JTree?

Или вы можете очистить входной буфер, чтобы прочитать строку

fflush (stdin)

, она определена в заголовке stdio.h .

Этот код работает ..

cout << "Enter the number: ";
int number;
cin >> number;

cout << "Enter names: ";
string names;
fflush(stdin);  //FLUSHING STDIN
getline(cin, names);
29
задан 5 February 2009 в 20:13
поделиться

4 ответа

Вынутый прямо из JTree API

 // 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);

, Конечно, необходимо изменить его немного для щелчка правой кнопкой вместо, щелкают левой кнопкой

20
ответ дан James P. 14 October 2019 в 07:38
поделиться

Renderer - это только временная «резиновая печать», поэтому добавление входного прослушивателя в этом случае не будет особенно полезным. Редактор, как вы указали, появляется только после того, как вы сделали жест для редактирования. Итак, вы хотите добавить слушатель к JTree (при условии, что он не реализован как составной компонент).

1
ответ дан Tom Hawtin - tackline 14 October 2019 в 07:38
поделиться

Я думаю, что Вы делаете вещи путем тяжелее, чем они должны быть.
JTree имеет несколько "add_foo_Listener" методов на нем. Реализуйте один из тех (TreeSelectionListener озирается вокруг права), и затем у Вас есть в настоящее время выбираемый узел.
Реализация MouseListener так, чтобы можно было обнаружить событие щелчка правой кнопкой (и добавить его к JTree, начиная с JTree's Компонент), и затем у Вас должно быть все, что необходимо отправить контекстно-зависимое меню.
Выезд этот учебное руководство для получения дополнительной информации.

2
ответ дан dw.mackie 14 October 2019 в 07:38
поделиться

Спасибо всем. Я знал, что что-то не так, когда тратил столько усилий на реализацию простого всплывающего окна.

Сначала я отклонил эту мысль, потому что было странно прибегать к координатам x и y, чтобы найти искомый узел, но я думаю, что это способ сделать это.

    // add MouseListener to tree
    MouseAdapter ma = new MouseAdapter() {
        private void myPopupEvent(MouseEvent e) {
            int x = e.getX();
            int y = e.getY();
            JTree tree = (JTree)e.getSource();
            TreePath path = tree.getPathForLocation(x, y);
            if (path == null)
                return; 

            tree.setSelectionPath(path);

            My_Obj obj = (My_Obj)path.getLastPathComponent();

            String label = "popup: " + obj.getTreeLabel();
            JPopupMenu popup = new JPopupMenu();
            popup.add(new JMenuItem(label));
            popup.show(tree, x, y);
        }
        public void mousePressed(MouseEvent e) {
            if (e.isPopupTrigger()) myPopupEvent(e);
        }
        public void mouseReleased(MouseEvent e) {
            if (e.isPopupTrigger()) myPopupEvent(e);
        }
    };

    (...)

    JTree tree = new JTree();
    tree.addMouseListener(ma);
12
ответ дан 14 October 2019 в 07:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: