我正在用Java做自己的记事本。基本部分即将完成。但是我对JMenuItem有很大的问题,它会将单词粘贴到JTextPane。它的工作原理(粘贴),但我希望JMenuItem反应:


什么时候在内存中(从任何地方复制-)=> JMenuItem将为setEnabled(true)
当内存中没有东西> JMenuItem将为setEnabled(false)

private static JMenuItem editPaste; // atribut
editPaste = new JMenuItem(new DefaultEditorKit.PasteAction()); //in private method



我不知道,我应该听什么(听什么?)这个动作。我在任何地方都没有看到它(http://docs.oracle.com/javase/tutorial/uiswing/components/generaltext.html)。

最佳答案

感谢您的建议和关键字。我赢了,部分是:)

就我而言:

// atributes
private static JMenuItem editPaste;
private static Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
// private method
clipboard.addFlavorListener(new ListenerPaste());
editPaste = new JMenuItem(new DefaultEditorKit.PasteAction());
editPaste.setEnabled(false);
// listener
private static class ListenerPaste implements FlavorListener {
    public void flavorsChanged(FlavorEvent e) {
        checkPaste();
    }
}
// private method
private static void checkPaste() {
    try {
        if(clipboard.getData(DataFlavor.stringFlavor) != null) {
            editPaste.setEnabled(true);
            // JOptionPane.showMessageDialog(null, (String) clipboard.getData(DataFlavor.stringFlavor));
        }
    } catch (UnsupportedFlavorException e1) {
        e1.printStackTrace();
    } catch (IOException e1) {
        e1.printStackTrace();
    }
}
// in constructor we check it also
checkPaste();


我不知道这是否是最合适的解决方案,但对我来说却有效。该行被注释-实时效果不佳-更多:listen to clipboard changes, check ownership?
下一个来源:
http://www.avajava.com/tutorials/lessons/how-do-i-get-a-string-from-the-clipboard.html

关于java - Java-如何在粘贴操作上设置setEnabled()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18146898/

10-09 07:00