2

私は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 )。

4

1 に答える 1

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();

これが最も適切な解決策であるかどうかはわかりませんが、私にとってはうまくいきます。コメントされているその行-リアルタイムではあまりうまく機能しません-詳細:クリップボードの変更をリッスンし、所有権を確認しますか? 次のソース: http://www.avajava.com/tutorials/lessons/how-do-i-get-a-string-from-the-clipboard.html

于 2013-08-09T17:26:55.090 に答える