我正在用Java做我自己的记事本。基本部分差不多完成了。但是我对把单词粘贴到JTextPane
上的JMenuItem
有很大的问题。它可以工作(粘贴),但我希望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();
我不知道这是否是最合适的解决方案,但对我来说它是有效的。这句话被评论了——实时效果不太好——更多:听剪贴板的更改,检查所有权?下一个来源:http://www.avajava.com/tutorials/lessons/how-do-i-get-a-string-from-the-clipboard.html