java - 一个 jPopup 用于多个控件

标签 java swing jpopupmenu

我有这样的代码:

    jTextArea1.add(jPopupMenu1);
    jTextArea1.setComponentPopupMenu(jPopupMenu1);

    jTextField1.add(jPopupMenu2);
    jTextField1.setComponentPopupMenu(jPopupMenu2);

对于菜单项,我有操作:

private void CopyActionPerformed(java.awt.event.ActionEvent evt) {
  jTextArea1.copy();

}
private void Copy1ActionPerformed(java.awt.event.ActionEvent evt) {
    jTextField1.copy();
}

现在我认为最好对所有文本组件使用一个弹出窗口,如何传递有关单击哪个组件来复制文本的信息?也许对于这种情况有一些更通用的解决方案?

最佳答案

Action 应该通过扩展TextAction来创建。 TextAction 类有一个方法,该方法将返回最后获得焦点的文本组件。然后可以在弹出菜单或添加到菜单栏的菜单上使用此操作。因此创建菜单项的基本代码是:

JMenuItem copy = new JMenuItem( new CustomAction() );

但是,它比这更容易,因为 DefaultEditorKit 已经提供了默认的复制操作,因此您需要做的就是:

JMenuItem copy = new JMenuItem( new DefaultEditorKit.CopyAction() );

关于java - 一个 jPopup 用于多个控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4636298/

相关文章:

java - JTable 与 JPopupMenu

java - JPopupMenu 行为

java - IntelliJ 提示 OSGi 引用属性

java - cURL命令上传文件不上传文件

java - KeyAdapter 监听器适用于 Windows,不适用于 Mac

注销 Swing 应用程序后,javaw.exe 不会从任务管理器终止

java - 如何在不窃取焦点的情况下显示 JPopupMenu?

具有停止条件的 Java 生产者-消费者

java - RabbitMQ 与应用程序解耦

java - 没有封闭实例错误