Java-如何在粘贴操作上设置Enabled()?
我正在用Java做我自己的记事本。基本部分差不多完成了。但是我对Java-如何在粘贴操作上设置Enabled()?,java,swing,listener,paste,jmenuitem,Java,Swing,Listener,Paste,Jmenuitem,我正在用Java做我自己的记事本。基本部分差不多完成了。但是我对JMenuItem有一个大问题,它将单词粘贴到JTextPane。它可以工作(粘贴),但我希望JMenuItem能够做出反应: 什么时候内存中有东西(从任何地方复制)=>JMenuItem将setEnabled(true) 当不是内存中的某个内容时,JMenuItem将setEnabled(false) 我不知道,我应该听什么(什么样的听众??)为这个行动。我没有看到任何地方()。谢谢你的建议和关键词。我赢了,一部分:) 就我
JMenuItem
有一个大问题,它将单词粘贴到JTextPane
。它可以工作(粘贴),但我希望JMenuItem能够做出反应:
- 什么时候内存中有东西(从任何地方复制)=>JMenuItem将
setEnabled(true)
- 当不是内存中的某个内容时,JMenuItem将
setEnabled(false)
我不知道,我应该听什么(什么样的听众??)为这个行动。我没有看到任何地方()。谢谢你的建议和关键词。我赢了,一部分:) 就我的案例而言:
// 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();
我不知道这是否是最合适的解决方案,但对我来说,它是有效的。被评论的那一行——实时而言,它工作得不太好——更多:
下一来源:
是否希望将(自定义)内存与操作系统默认值分开?然后-是的,您可以实现它并在内存状态下触发事件changes@Tala不,我不想把它分开(我不确切知道)。我想要和记事本或记事本++一样的趣味性。嗯。。。剪贴板上不是总是有东西吗?无论如何,默认的textActions根本没有启用管理:您必须自己实现它。对于粘贴,您可以在剪贴板上尝试启用/禁用相应操作的FlavourListener。有关文本操作中(缺少)启用管理的一些详细信息:java中有一个类剪贴板,您可以在其上注册一个FlavourListener。希望这有帮助。我从来没有试过。
// 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();