栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么右键单击不适用于Java应用程序?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么右键单击不适用于Java应用程序?

右键单击效果很好-在Swing中,不要获取您在其他应用中习惯的上下文菜单是很正常的。如果您希望有一个右键单击打开的弹出菜单,例如具有剪切/复制/粘贴操作-
您必须自己实现。我在我的应用程序中使用了以下内容:

public class ContextMenuMouseListener extends MouseAdapter {    private JPopupMenu popup = new JPopupMenu();    private Action cutAction;    private Action copyAction;    private Action pasteAction;    private Action undoAction;    private Action selectAllAction;    private JTextComponent textComponent;    private String savedString = "";    private Actions lastActionSelected;    private enum Actions { UNDO, CUT, COPY, PASTE, SELECT_ALL };    public ContextMenuMouseListener() {        undoAction = new AbstractAction("Undo") { @Override public void actionPerformed(ActionEvent ae) {         textComponent.setText("");         textComponent.replaceSelection(savedString);         lastActionSelected = Actions.UNDO; }        };        popup.add(undoAction);        popup.addSeparator();        cutAction = new AbstractAction("Cut") { @Override public void actionPerformed(ActionEvent ae) {     lastActionSelected = Actions.CUT;     savedString = textComponent.getText();     textComponent.cut(); }        };        popup.add(cutAction);        copyAction = new AbstractAction("Copy") { @Override public void actionPerformed(ActionEvent ae) {     lastActionSelected = Actions.COPY;     textComponent.copy(); }        };        popup.add(copyAction);        pasteAction = new AbstractAction("Paste") { @Override public void actionPerformed(ActionEvent ae) {     lastActionSelected = Actions.PASTE;     savedString = textComponent.getText();     textComponent.paste(); }        };        popup.add(pasteAction);        popup.addSeparator();        selectAllAction = new AbstractAction("Select All") { @Override public void actionPerformed(ActionEvent ae) {     lastActionSelected = Actions.SELECT_ALL;     textComponent.selectAll(); }        };        popup.add(selectAllAction);    }    @Override    public void mouseClicked(MouseEvent e) {        if (e.getModifiers() == InputEvent.BUTTON3_MASK) { if (!(e.getSource() instanceof JTextComponent)) {     return; } textComponent = (JTextComponent) e.getSource(); textComponent.requestFocus(); boolean enabled = textComponent.isEnabled(); boolean editable = textComponent.isEditable(); boolean nonempty = !(textComponent.getText() == null || textComponent.getText().equals("")); boolean marked = textComponent.getSelectedText() != null; boolean pasteAvailable = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(null).isDataFlavorSupported(DataFlavor.stringFlavor); undoAction.setEnabled(enabled && editable && (lastActionSelected == Actions.CUT || lastActionSelected == Actions.PASTE)); cutAction.setEnabled(enabled && editable && marked); copyAction.setEnabled(enabled && marked); pasteAction.setEnabled(enabled && editable && pasteAvailable); selectAllAction.setEnabled(enabled && nonempty); int nx = e.getX(); if (nx > 500) {     nx = nx - popup.getSize().width; } popup.show(e.getComponent(), nx, e.getY() - popup.getSize().height);        }    }}

最后,您应该将此侦听器附加到要在右键单击上具有上下文菜单的任何文本组件。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/570396.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号