当前位置: 首页 > 面试题库 >

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

商畅
2023-03-14
问题内容

我做了一个基于Java Swing的应用程序。
在我的应用程序上,如果我在JFrame上的任何地方单击,则我的右键单击不起作用?
我没有设置那样的东西..那为什么不起作用?

基本上我的键盘不起作用,然后我尝试复制-然后使用鼠标粘贴数据,然后我才知道…我的右键单击不适用于我的应用程序的任何区域…


问题答案:

右键单击效果很好-在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);
        }
    }
}

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



 类似资料:
  • 为什么JSF2/Facelet的ui:repeat不接受java。util。迭代器的值?可以在迭代器后面隐藏如此多的实现和内存节约,因为长度不需要知道,所以拥有它是非常有用的。但是相反,我需要将迭代器转换为列表,并抛弃所有优点,以便ui:repeat。 可能有阶段、时间或可序列化的原因,但我对可用文档的浏览并没有给出这些原因。我们还没有使这一不可能成为可能的科学吗?

  • 问题内容: 我实现了Android 与。在这里,我有一个问题,当我单击列表项时,当闪烁的颜色也没有到来时,即橙色,则不执行任何操作。因此,您对我的问题的这个答案有任何想法吗? 我也将此代码放入Main ListActivity。 问题答案: 您首先要注意的是,每当元素中存在诸如按钮之类的Clickable元素时,它们都会控制click事件。因此,您将没有机会接受click事件。 您要做的只是将Li

  • 问题内容: 我想知道是否有最佳实践/正确的方法来为React组件设置右键菜单。 我目前有这个… 可以,但是感觉有点混乱,我想知道是否还有其他方法可以使用,任何信息将不胜感激, 谢谢! 问题答案: 更新: 想通了-这是您可以做的 在渲染中,您可以将函数传递给onContextMenu,以使该react组件发生右键单击。

  • 问题内容: 嗨,我正在搜索如何(仅)启用鼠标右键,并使用NetBeans在jFrame中显示一个弹出菜单。使用我的代码为: 我仍然无法获得最佳结果,因为它还会在单击鼠标左键时弹出,也向我暗示我正在做任何错误操作。 问题答案: 这就是它应该真正做到的事情,它很棒而且有用 别忘了添加一个导入 玩得开心…

  • 问题内容: 我正在尝试使用selenium进行右键单击,对此有任何想法吗? 问题答案: 我已经尝试过ActionSequence,而且效果很好。 找不到ContextClick函数,应使用click。 因此,应如下所示: 元素是您的Web元素,2表示右键。 要大致模拟JavaScript中的右键单击,请查看JavaScript模拟代码中的右键单击。

  • 问题内容: 作为Java新手,我想知道:在世界上所有的语言中,为什么Java经常用于企业应用程序?与其他语言相比,是什么使它如此?在未来的几年中会继续这样吗? 非常感谢您的见解。提前致谢 :) 问题答案: 一句话:图书馆。Java具有大量优秀的库,用于解决开发企业应用程序时需要解决的大多数常见问题。在许多情况下,满足特定需求的选择不止一个好选择,而且这些图书馆通常是在具有商业友好性许可的情况下是免