Java - 如何在粘贴Action上setEnabled()?

时间:2013-08-09 12:41:25

标签: java swing listener paste jmenuitem

我在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)。

1 个答案:

答案 0 :(得分:0)

感谢您提供建议和关键字。我获胜,部分是:)

我的案例有效:

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