java - 如何从不同的类获取文本文件的输入

标签 java swing jtextarea

我正在与发布者和订阅者制作聊天应用程序 我有两个类,一类用于聊天框架,一类是聊天成员的类。 成员类从jtextfield获取消息,聊天成员发布者将其发送回jtextarea。

我很难将文本从订阅者 MessageListener 取回 jtextarea

@Override
public void onMessage(Message m)
{
    try
    {
        TextMessage textMessage = (TextMessage) m;
        System.out.println("Received:" + textMessage.getText());
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

MessageListener listener = new MessageListener()
{
    @Override
    public void onMessage(Message m)
    {
        try
        {
            TextMessage textMessage = (TextMessage) m;
            System.out.println("Received:" + textMessage.getText());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
};

private void sendChatBattonActionPerformed(java.awt.event.ActionEvent evt) { 
   String empty=""; 
   String message= inputChatText.getText(); 
   if (message.equals(empty)){ 
       inputChatText.setText(""); 
       inputChatText.requestFocus(); 
   } else { 
       inputChatText.setText(""); 
       try { 
           String newMessage=userName+"~"+message+"~chat"; 
           sendMessage(newMessage); 
       } catch (JMSException ex) {
           Logger.getLogger(chatFrame.class.getName()).log(Level.SEVERE, null, ex);
       }
    }
}

谢谢。

最佳答案

根据提供的代码片段,这就是我的理解,要在文本区域中附加文本,请使用 append .

@Override
public void onMessage(Message m) {
    try {
        TextMessage textMessage = (TextMessage) m;
        System.out.println("Received:" + textMessage.getText());
        jTextArea.apped(textMessage.getText());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

假设充当聊天框架的类称为 ChatFrame 并具有 MessageListener,在这种情况下您的代码将如下所示:

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;
import javax.swing.JTextArea;


public class ChatFrame {
    JTextArea textArea = null;

    void init(){
        //create and show UI here
    }

    class MessageListener implements javax.jms.MessageListener {
        @Override
        public void onMessage(Message arg0) {
            TextMessage textMessage = (TextMessage)arg0;
            try {
                textArea.append(textMessage.getText());
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
}

第二种方法,您的 ChatFrameMessageListener 位于两个单独的 Java 源文件中,您的代码如下所示:

ChatFrame

import javax.swing.JTextArea;

public class ChatFrame {
    JTextArea textArea = null;

    void init(){
        //create and show UI here

        //Also start your message listener and give it the reference of textArea to be updated
        MessageListener messageListener = new MessageListener(this.textArea);
    }
}

MessageListener

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.TextMessage;
import javax.swing.JTextArea;


public class MessageListener implements javax.jms.MessageListener {

    private JTextArea textArea = null;

    public MessageListener(JTextArea textArea){
        this.textArea = textArea;
        createConnection();
    }

    private void createConnection(){
        //Create your JMS Connection and add yourself as subscriber
    }

    @Override
    public void onMessage(Message arg0) {
        TextMessage textMessage = (TextMessage)arg0;
        try {
            textArea.append(textMessage.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }
}

关于java - 如何从不同的类获取文本文件的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767543/

相关文章:

java - 使用JMenuBar、JMenu和JMenuItem自行设计菜单栏时呈现奇怪的效果

java - 使用记事本程序、JMenu、JPanel 的建议

Java - 在 jTextArea 中输入时,将焦点设置到相应的 jButton

java - 多个 Java 输入

java - Cardview 不显示在 android studio 3.5.1

java - 删除 Jframe 面板

java - 将 int 值分配给 JCheckBox

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - ActionListeners、多字段更新和从文件重新加载用户 GUI 选择

java - 有没有办法在 JTextArea 中支持真正的回车而不换行?