addactionListener(this)如何正确放置这行代码?

时间:2015-12-07 22:27:25

标签: java swing actionlistener jtextarea

所以我正在设计一个聊天室,在我阅读套接字之前,我需要完成这个GUI。基本上我主要使用TextDemo作为我的向导。我喜欢它的显示方式,所以我觉得它很容易从我的代码开始。在我的代码中,只要我尝试输入它就会中断:

input.addActionListener(this);

当我注释掉那一行时,它会回到显示/运行状态。由于我的错误,看起来我把它放在错误的位置。我尝试过一点点但我似乎没有解决问题的技巧来解决这个问题。有人可以帮助纠正我并解释我在这里做错了什么吗?

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

public class GUI extends JPanel implements ActionListener
{     
   private final static String newline = "\n";

///// CREATING THE GUI /////
JFrame frame = new JFrame("Chatroom");
JPanel panel = new JPanel();
JPanel panel2 = new JPanel();
JPanel chatpanel = new JPanel();
JPanel inputpanel = new JPanel();
JPanel sendpanel = new JPanel();
JTextArea chat = new JTextArea(19, 49);
JTextArea input = new JTextArea(3, 40);

JScrollPane chatscroll = new JScrollPane(chat,
                                         JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                                         JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
JScrollPane inputscroll = new JScrollPane(input,
                                         JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                                         JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

JButton connectbutton = new JButton("Connect");
JButton disconnectbutton = new JButton("Disconnect");
JButton send = new JButton("Send");
JLabel label = new JLabel();

///// GUI CONSTRUCTOR /////
public GUI()
{
   chatroomGUI();
}

public void chatroomGUI()
{      
   ///// GUI DISPLAY /////
   frame.setVisible(true);
   frame.setSize(800, 450);
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   panel.setBackground(Color.GRAY);
   panel2.setBackground(Color.lightGray);
   chatpanel.setBackground(Color.lightGray);
   inputpanel.setBackground(Color.lightGray);
   sendpanel.setBackground(Color.lightGray);

   ///// ACTION LISTENER /////
   //input.addActionListener(this);

   chat.setEditable(false);
   chat.setFont(new Font("Dialog", Font.PLAIN, 12));
   chat.setLineWrap(true);
   chat.setWrapStyleWord(true);

   input.setFont(new Font("Fialog", Font.PLAIN, 12));
   input.setLineWrap(true);
   input.setWrapStyleWord(true);

   sendpanel.setLayout(new BorderLayout(0, 0));
   sendpanel.setPreferredSize(new Dimension(95, 50));
   chatpanel.setLayout(new FlowLayout());
   chatpanel.setPreferredSize(new Dimension(565, 320));

   ///// ADD AREA /////
   chatpanel.add(chatscroll);
   inputpanel.add(inputscroll);
   inputpanel.add(sendpanel, BorderLayout.EAST);
   sendpanel.add(send, BorderLayout.CENTER);

   panel.add(connectbutton);
   panel.add(disconnectbutton);
   panel.add(label);

   panel2.add(chatpanel);
   panel2.add(inputpanel);

   frame.add(panel, BorderLayout.WEST);
   frame.add(panel2);
}

///// ACTION PERFORMED /////
/*The following will take any text that is typed inside of
the "input" area and display it in the "chat" screen area.*/ 
public void actionPerformed(ActionEvent evt)
{
   String text = input.getText();
   chat.append(text + newline);
   input.selectAll();
   chat.setCaretPosition(chat.getDocument().getLength());
}
}

注意:我的主要是在另一个班级。该代码只是看起来像:

public class Chatroom
{
   public static void main(String[] args)
{
   javax.swing.SwingUtilities.invokeLater(new Runnable()
      {
         public void run()
         {
            new GUI();
         }
     });
}
}

1 个答案:

答案 0 :(得分:2)

JTextArea不支持ActionListener API,因此它没有addActionListener方法。您应该先咨询JavaDocstutorials

根据您的目的,您可以考虑使用DocumentListenerDocumentFilter或使用密钥绑定API,example