Здравствуйте возникла следующая проблема:
необходимо создать JPopupMenu для JTree.
Здесь и
здесьАвтор: DemAS
Дата: 23.11.04
были предложены методы по создании менюшки, но у них есть серьёзный недостаток: при щелчке правой кнопкой мышки (что обычно вызывает появление менюшки) узел находящийся под курсором не выделяется. Поэтому для работы с определённым узлом необходимо сначала выделить его а затем вызывать меню, что крайне неудобно. Во многих приложениях же узлы выделяются перед выховом меню.
Буду крайне благодарен если кто нибудь подскажет как это сделать.
Здравствуйте, Zelgadis, Вы писали:
Z>Здравствуйте возникла следующая проблема:
Z>необходимо создать JPopupMenu для JTree. Здесь и здесьАвтор: DemAS
Дата: 23.11.04
были предложены методы по создании менюшки, но у них есть серьёзный недостаток: при щелчке правой кнопкой мышки (что обычно вызывает появление менюшки) узел находящийся под курсором не выделяется. Поэтому для работы с определённым узлом необходимо сначала выделить его а затем вызывать меню, что крайне неудобно. Во многих приложениях же узлы выделяются перед выховом меню.
Z>Буду крайне благодарен если кто нибудь подскажет как это сделать.
Можно зарегистрировать MouseListener, в котором менять выделение, а потом показывать меню. Что-то типа:
MouseListener ml = new MouseAdapter() {
public void showPopup(MouseEvent e) {
if (e.isPopupTrigger()) {
menu.show((Component) e.getSource(), e.getX(), e.getY());
}
}
@Override
public void mousePressed(MouseEvent e) {
int row = tree.getRowForLocation(e.getX(), e.getY());
if (row != -1) {
tree.setSelectionRow(row);
}
showPopup(e);
}
@Override
public void mouseReleased(MouseEvent e) {
showPopup(e);
}
};
спасибо за помощь.
P.S. кстати интересная ситуация при таком способе получении узла на который указывает курсор всё работает, но до этого пробовал получать именно узел и он возвращал null.
Здравствуйте, danila.master, Вы писали:
DM>Можно зарегистрировать MouseListener, в котором менять выделение, а потом показывать меню. Что-то типа:
DM>DM> MouseListener ml = new MouseAdapter() {
DM> public void showPopup(MouseEvent e) {
DM> if (e.isPopupTrigger()) {
DM> menu.show((Component) e.getSource(), e.getX(), e.getY());
DM> }
DM> }
DM> @Override
DM> public void mousePressed(MouseEvent e) {
DM> int row = tree.getRowForLocation(e.getX(), e.getY());
DM> if (row != -1) {
DM> tree.setSelectionRow(row);
DM> }
DM> showPopup(e);
DM> }
DM> @Override
DM> public void mouseReleased(MouseEvent e) {
DM> showPopup(e);
DM> }
DM> };
DM>