【问题标题】:check to see if a JFrame is open检查 JFrame 是否打开
【发布时间】:2012-07-06 17:49:20
【问题描述】:

我正在尝试为我的程序创建一个聊天客户端,并且我想为每个聊天打开一个新窗口(A 和 B 不会与 A 和 C 在同一个窗口中)我有我的 psudocode正在尝试,但不确定如何编写。

聊天客户端:

inputstream.read()
Read who message from
If (chat window arleady open with person from)
{
    Add Message to output section of the window
{
else if (chat window not open)
{
    Open new chat window with person from
    Display message in new chat window
}

为此,我想到的是将 IP 存储在一个数组中,然后每当客户端收到消息时,它就会查看数组以查看是否存储了 IP。如果是存储的,则窗口应该已经打开,否则需要打开窗口。我可以通过使用 JFrame 中的 defaultonclose 命令对此进行编程,以便在窗口关闭时调用 IP 的删除,但这是我遇到的问题。

  1. 一旦我在数组中搜索 IP 地址,如果窗口已经打开(假设我有 A B 和 C 与 D 通话),我如何确保 C 发送的消息将其放置在 C 窗口中?

1.1 我考虑过产生一个新线程,命名线程,然后当有消息进入时将其传递到与名称匹配的线程,但我不确定如何做到这一点。我以前读过线程的名称,但从未将某些内容传递给特定的线程。

有没有在不下载额外库的情况下更容易做到这一点?

【问题讨论】:

  • 您的客户看起来怎么样?你认为窗户是什么?
  • 客户端当前控制库存数据库,但我正在尝试向其添加聊天服务。我让数据库命令和消息命令在同一个套接字上传输,然后根据我称为“类型”的字段生成库存处理程序或聊天处理程序。我认为每个 JFrame 都是一个“窗口”。
  • 我仍然不确定我是否理解您的问题。是关于管理哪个对话显示在哪个窗口中吗?
  • 我真的有两个问题。 #1 如何检查窗口是否打开,以及 #2 如何将数据放入正确的窗口。如果我打开了聊天服务,并且我在 3 个不同的窗口中与 3 个不同的人交谈,我如何确保当我收到来自第 2 个人的消息时,它进入属于我们 2 人之间对话的窗口.
  • 您或许应该拆分您的问题以解决每个问题的一个问题。这是关于您的问题的提示:您的聊天服务可以跟踪您的对话和窗口。例如,您可以使用地图来跟踪发件人和他们的对话。你也可以使用地图来存储哪个窗口是“打开”的。

标签: java swing jframe chat


【解决方案1】:
  • 不要将JFrame用于另一个窗口,因为您不能设置parent v.s.owner,请改用JDialog

  • 然后JFrame.getOwnedWindows()返回JDialog(s)的所有实例,其中使用JDialog(myFrame owner)

  • 在所有情况下,Window[] allWindows = Window.getWindows(); 返回当前 JVM 的所有实例,返回 (J)Frames(J)Dialogs(J)WindowsJOptionsPanes 的所有实例

【讨论】:

  • 所以如果我做对了,我会做 JDialog(Frame owner, String title) 其中所有者将是发送消息的人,标题将是窗口磁贴栏中的内容?然后像添加 JFrame 一样添加我的 JTextAreas、按钮等?
  • 1) 所有者可能是 JFrame 2) 字符串标题可能是人 3) 其余是正确的,
  • 所以我像往常一样构造我的 JFrame 并将 JFrame 作为“所有者”传递?还是 JDialog 成为新的框架?澄清我做JDialog JD = new JDialog(JFrame myFrame,String Matt)然后是JD.add(text)还是myFrame.add(text)?我在文章中看到了容器调用,所以我假设是 JD.add,但在编写所有代码之前我想澄清一下。
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 2015-02-14
  • 2017-05-26
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多