Java 右键单击以选择文本JTextPane

Java 右键单击以选择文本JTextPane,java,swing,Java,Swing,在我的JTextPane中,当我选择文本并右键单击时;它提供了复制文本的选项。代码如下: public LogPane() { super(); JPopupMenu pop = new JPopupMenu(); final LogPane l = this; JMenuItem copy = new JMenuItem("Copy CTRL+C"); copy.addActionListener(new ActionListener() {

在我的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);
}

因此,右键单击,它提供了复制文本的选项。但是我想要的是,当没有选择任何文本并且用户右键单击时,不应该显示-Copy选项。如何合并更改?

您显示了错误的代码部分。重要的代码部分是您的
鼠标侦听器
,即右键单击时发生的情况

在该
MouseEvent
中,您可以使用,即


一个
PopupMenuListener
应该可以做到这一点

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