在两个 JPanel 对象之间发送消息

2024-02-23

我有一个包含 JPanel 的 Java JFrame。在该 JPanel 中,有两个独立的 JPanel。当用户单击第一个 JPanel 中的按钮时,需要向另一个 JPanel 发送一条消息,通知它单击了哪个按钮。在这样的对象之间发送消息的最简单方法是什么?


对于 mKorbel(以及原始海报):
我建议的是松散耦合,即一个 JPanel 不了解另一个 JPanel,并且所有连接都是通过某种控件完成的。例如,借用您的一些代码:

CopyTextNorthPanel2.java

import java.awt.*;
import javax.swing.*;

public class CopyTextNorthPanel2 extends JPanel {

   private static final long serialVersionUID = 1L;
   public JTextField northField;

   public CopyTextNorthPanel2() {
      northField = new JTextField("Welcome World");
      northField.setFont(new Font("Serif", Font.BOLD, 20));
      northField.setPreferredSize(new Dimension(300, 25));
      add(northField);
   }

   public String getNorthFieldText() {
      return northField.getText();
   }
}

CopyTextSouthPanel2.java

import java.awt.event.*;
import javax.swing.*;

public class CopyTextSouthPanel2 extends JPanel {

   private static final long serialVersionUID = 1L;
   private JTextField firstText = new JTextField("Desired TextField");
   private JButton copyButton = new JButton("Copy text from JTextFields");
   private CopyTextControl2 control;

   public CopyTextSouthPanel2() {
      copyButton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            if (control != null) {
               control.copyAction();
            }
         }
      });

      add(firstText);
      add(copyButton);
   }

   public void setControl(CopyTextControl2 control) {
      this.control = control;
   }

   public void setFirstText(String text) {
      firstText.setText(text);
   }
}

CopyTextControl2.java

public class CopyTextControl2 {
   private CopyTextNorthPanel2 northPanel;
   private CopyTextSouthPanel2 southPanel;

   public void copyAction() {
      if (northPanel != null && southPanel != null) {
         southPanel.setFirstText(northPanel.getNorthFieldText());
      }
   }

   public void setNorthPanel(CopyTextNorthPanel2 northPanel) {
      this.northPanel = northPanel;
   }

   public void setSouthPanel(CopyTextSouthPanel2 southPanel) {
      this.southPanel = southPanel;
   }

}

CopyText2.java

import java.awt.*;
import javax.swing.*;

public class CopyText2 {

   private static void createAndShowUI() {
      CopyTextNorthPanel2 northPanel = new CopyTextNorthPanel2();
      CopyTextSouthPanel2 southPanel = new CopyTextSouthPanel2();
      CopyTextControl2 control = new CopyTextControl2();

      southPanel.setControl(control);
      control.setNorthPanel(northPanel);
      control.setSouthPanel(southPanel);

      JPanel mainPanel = new JPanel(new BorderLayout());
      mainPanel.add(northPanel, BorderLayout.NORTH);
      mainPanel.add(Box.createRigidArea(new Dimension(100, 100)), BorderLayout.CENTER);
      mainPanel.add(southPanel, BorderLayout.SOUTH);

      JFrame frame = new JFrame("Copy Text");
      frame.getContentPane().add(mainPanel);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      java.awt.EventQueue.invokeLater(new Runnable() {
         public void run() {
            createAndShowUI();
         }
      });
   }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在两个 JPanel 对象之间发送消息 的相关文章

随机推荐

  • Git 告诉我拉,然后提交,然后拉?

    我正在尝试推送新的更改 但我有一个冲突的文件 尝试推送后 出现以下错误 Merge the remote changes e g git pull before pushing again See the Note about fast f
  • 脚本可以编辑受保护的范围或工作表吗?

    我正在使用一个脚本来复制和粘贴一些数据 这些数据由几个用户填充 而没有权限仅编辑一行 其他范围受到这些用户的保护 无法编辑 该脚本将数据从一张纸复制到另一张纸 并且两张纸都受到完全保护 除了可以编辑任何内容的两个编辑者之外 当没有人处理此电
  • 将嵌入式 Glassfish 与 Maven 结合使用

    有人知道嵌入式 Glassfish 吗 我想运行一些 EJB 测试 但我不想每次运行测试时都启动和停止嵌入的 glassfish 根据插件文档 我应该将其放入 POM 中
  • 在移动设备上部署 C++ QML 插件的正确方法是什么?

    我经常使用 Box2D QML 插件 看起来效果非常好 但是 我想在 Android SGS2 上部署我的示例应用程序 但我似乎无法让它工作 无论我尝试在 AVD 上还是在设备上运行它 它都不起作用 androiddeployqt 成功完成
  • 嵌套 div 上的 jQuery click()

    代码可能比我能更好地解释这一点 div class wrapper div class inner1 div div class inner2 div div 当我点击inner1div 它运行do something 与两个inner1d
  • 为什么我的 PDF 生成为空白?

    我正在使用 ItextSharp 和 c asp net MVC 生成 PDF 报告 但是 当我生成报告时 PDF 返回为空白 除了工作正常的标题之外 我会喜欢你的意见 生成报告的代码如下 using var writer PdfWrite
  • 在 Mac OS X 上以编程方式修改家长控制

    Mac OS 具有一组非常基本的家长控制选项 允许您限制用户对网站和应用程序的访问 以及设置的每日时间限制 我希望能够编写脚本来执行如下操作 允许上午 8 点至上午 9 30 访问特定网站 限制对游戏的访问 允许下午 5 点至下午 6 00
  • 如何使错误页面(http 500)在 IceFaces 中工作?

    使用 Icefaces 2 如果在标准 非icefaces h commandButton 上执行操作方法期间发生错误 则该按钮似乎没有任何操作 尽管在 web xml 中将其配置为显示错误页面 但不会显示错误页面 我可以通过将标签包围来使
  • Sprite/Texture Atlas:GDI+ Bitmap.MakeTransparent 用于 OpenTK 的颜色键

    我正在使用 C 和 OpenTK 编写精灵 纹理图集功能的支持类 到目前为止 大多数功能都运行良好 正交视图上的简单 2D 图块 我的问题与调用 GDI Bitmap MakeTransparent 方法设置颜色 洋红色 0xFFFF00F
  • JavaScript 中 Uint8Array 到图像

    我有一个名为的 Uint8ArrayframeBytes 我使用以下代码从该字节数组创建了 RGBA 值 for var i 0 i lt frameBytes length i imgData data 4 i frameBytes i
  • Safari 中的跨源视频

    有谁知道 Safari 是否支持crossoriginHTML5 上的属性
  • 卡夫卡连接|无法反序列化主题数据 |检索 id 的 Avro 键/值架构版本时出错 |未找到主题错误代码:40401

    首先感谢 OneCricketeer 迄今为止的支持 到目前为止我已经尝试了很多配置 我不知道还能尝试什么 使用汇合connect standalone worker properties sink properties访问外部流 连接正在
  • 如何拥有 JFrame 最大化图标

    我如何创建一个JFrameMac 上 eclipse 中的窗口有一个图标 可以使窗口全屏显示 就像大多数窗口右上角的双箭头图标一样 看一眼 OSX Lion 上 Java 应用程序的全屏功能 https stackoverflow com
  • Java,替换列表中的值

    我有以下问题 我想用一个方法获取一个列表 在该列表中找到一个值并将其替换为另一个值 void replaceAll ArrayList
  • 错误代码 7503 - 应用程序未在我们的商店中注册

    我尝试通过 Graph API 接收呼叫信息 准确地说 我尝试运行文档中的示例 5 但我只收到以下错误 error code UnknownError message errorCode 7503 message Application i
  • nvm 在哪里存储 node.js 安装?

    我找不到通过以下方式下载和安装的 Node js 安装位置 nvm install 5 0 你知道答案吗 nvm which 5 0将为您提供该版本 Node js 的安装路径
  • 尝试评估缺失的嵌套键时,Helm 图表失败,并显示“nil 指针评估接口 {}”

    我正在编写一个 Helm 3 库图表 并希望创建一个具有默认值的 YAML 但是 当尝试设置默认值时nestedkey 不存在 Helm 失败并显示以下错误消息 nil pointer evaluating interface 假设我的 K
  • Grasshopper 语音 + Twilio 文本

    我的公司目前使用 Grasshopper 作为语音系统来接收和路由入站客户支持电话 它运行得很好 只不过现在是 2014 年 人们希望能够通过短信向我们的免费客户支持号码发送问题并获得回复 Grasshopper 不支持接收 转发短信 所以
  • 使用 TThread.Resume 有什么问题? [复制]

    这个问题在这里已经有答案了 很久以前 当我开始在 Delphi 中使用线程时 我通过调用使线程自行启动TThread Resume在其构造函数的末尾 并且仍然这样做 如下所示 constructor TMyThread Create con
  • 在两个 JPanel 对象之间发送消息

    我有一个包含 JPanel 的 Java JFrame 在该 JPanel 中 有两个独立的 JPanel 当用户单击第一个 JPanel 中的按钮时 需要向另一个 JPanel 发送一条消息 通知它单击了哪个按钮 在这样的对象之间发送消息