【发布时间】:2014-12-16 08:32:46
【问题描述】:
我正在尝试使用 java 编写一个简单的聊天室 GUI,包括一个用于显示在线用户的 Jlist。首先,用户选择一个显示名称,以便该名称将显示在 JList 中。 这是代码:
(问题仅在createServer() 方法内部,该方法将 Name 作为参数发送给处理程序构造函数,以便在 JList 中显示它!)
public class GUI{
private JFrame frame;
private JButton btnSend, btnConnect;
private JTextArea txtChat;
private JTextField fldText, fldName;
private JList clientList;
private DefaultListModel listModel;
private JScrollPane sc, scClients;
private JPanel jpS2All, jpS2Client, jpS2Text;
private String Name;
class handler implements ActionListener, MouseListener{
private String Name = null;
void handler(String Name) {
this.Name = Name;
}
@Override
public void actionPerformed(ActionEvent e) {
chatroom();
}
@Override
public void mouseClicked(MouseEvent e) {
fldName.setText("");
listModel.addElement(Name);
}
}
public void creatServer() {
frame = new JFrame("login");
frame.setBounds(50, 50, 300, 200);
btnConnect = new JButton("connect");
frame.add(btnConnect, BorderLayout.EAST);
fldName = new JTextField("enter your name");
fldName.addMouseListener(new handler());
Name = fldName.getText();
btnConnect.addActionListener(new handler(Name));
frame.add(fldName, BorderLayout.CENTER);
frame.setVisible(true);
}
public void chatroom() {
frame = new JFrame("online friends");
frame.setBounds(100, 100, 400, 400);
jpS2All = new JPanel();
txtChat = new JTextArea();
txtChat.setRows(25);
txtChat.setColumns(25);
txtChat.setEditable(false);
sc = new JScrollPane(txtChat);
jpS2All.add(sc);
frame.add(jpS2All, BorderLayout.WEST);
////////////////////////
jpS2Text = new JPanel();
fldText = new JTextField();
fldText.setColumns(34);
fldText.setHorizontalAlignment(JTextField.RIGHT);
jpS2Text.add(fldText);
frame.add(jpS2Text, BorderLayout.SOUTH);
/////////
jpS2Client = new JPanel();
listModel = new DefaultListModel();
clientList = new JList(listModel);
clientList.setFixedCellHeight(14);
clientList.setFixedCellWidth(100);
scClients = new JScrollPane(clientList);
frame.add(jpS2Client.add(scClients), BorderLayout.EAST);
/////////
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
frame.pack();
}
}
最后在main方法中:
public class Chat {
public static void main(String[] args) {
GUI gui = new GUI();
gui.creatServer();
}
}
【问题讨论】:
-
它没有将名称添加到JList,在这一行出现错误:btnConnect.addActionListener(new handler(Name));它说实际和参数列表的长度不同
-
当listModel发生变化时,再次调用clientList.setModel(listModel)。
-
我之前提到的错误呢?我的意思是这个错误:实际和参数列表的长度不同我认为这个错误必须首先解决!
标签: java swing jlist defaultlistmodel