3

JTextPaneで、テキストを選択して右クリックすると、テキストをコピーするオプションがあります。以下はコードです:

public LogPane() {
    super();
    JPopupMenu pop = new JPopupMenu();
    final LogPane l = this;
    JMenuItem copy = new JMenuItem("Copy      CTRL+C");
    copy.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            selected = l.getSelectedText();
            if(selected==null)
                return;
            StringSelection clipString = new StringSelection(selected);
            clipbd.setContents(clipString,clipString);
        }

    }); 
    pop.add(copy);
    copy.setEnabled(true);
}

したがって、右クリックすると、テキストをコピーするオプションが表示されます。しかし、私が欲しいのは、テキストが選択されておらず、ユーザーが右クリックした場合、[コピー]オプションは表示されないということです。変更はどのように組み込む必要がありますか?

4

2 に答える 2

1

APopupMenuListenerはトリックを行う必要があります。

public LogPane() {
    super();
    JPopupMenu pop = new JPopupMenu();
    final LogPane l = this;
    final JMenuItem copy = new JMenuItem("Copy      CTRL+C");
    copy.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            selected = l.getSelectedText();
            if(selected==null)
                return;
            StringSelection clipString = new StringSelection(selected);
            clipbd.setContents(clipString,clipString);
        }

    }); 
    pop.add(copy);
    pop.addPopupMenuListener(new PopupMenuListener() {
        public void popupMenuCanceled(PopupMenuEvent e) {}
        public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {}
        public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
            copy.setEnabled(l.getSelectedText() != null);
        }
    });
}
于 2012-11-20T14:07:59.490 に答える
1

コードの間違った部分を示しました。重要なコードの部分はMouseListener、つまり、右クリックすると何が起こるかです。

その で、JTextComponent.getSelectedText()を使用しMouseEventて、の選択を確認できます。JTextPane

public void MouseClicked(MouseEvent me) {
    if(me.getButton() == MouseEvent.BUTTON2) {
         // This is the code you probably don't have yet
         // You may have to check this cast
         JTextComponent myComponent = (JTextComponent) me.getComponent();
         if (myComponent.getSelectedText() != null) {
             JPopupMenu theMenu = myComponent.getComponentPopupMenu();
             // Etc... you wrote this part already and said it works
         }
    }
}
于 2012-11-20T14:04:48.613 に答える