我仿照QQ做了一个聊天系统,是用GUI做的,但是做到登陆后出现自己的登陆界面时,我怎么将jtextarea里面的好友双击后,就弹出一个与他聊天的对话框呢,jtextarea 里的一行记录是一个好友,就是用鼠标双击的话(仿照QQ),弹出与他聊天的对话框。
注:(好友是放在数据库中的)
------解决方案--------------------
很显然你要对行分别操作就不要用jtextarea 要换个别的什么
------解决方案--------------------
显然你要实现对用户双击,俩点是必须的:1,鼠标位置要能够按行定位 2.要能够识别并获取该行的文本信息。
你可以查阅Jtextarea类里提供的方法,里面有设置分行方式和获取行位置的方法,或者可以设置滚动条,看能否
定位到行?如果这样不行,那么可以自己设置一个算法,确定每一行对应的鼠标位置范围来定位该行。然后获得该行的文本信息,通过双击触发产生对应该用户的聊天窗口。
由于对Jtextarea不是很熟悉,仅供LZ参考~~
------解决方案--------------------
我那jtable做的例子
- Java code
import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import javax.swing.JFrame;import javax.swing.JTable;import swing.ShowDialog;public class Mytable { /** * @param args */ public static void main(String[] args) { CellEditable mytable = new CellEditable(); JFrame f = new JFrame("QQ"); JTable t = new JTable(mytable); t.addMouseListener(new MouseListener(){ public void mouseClicked(MouseEvent arg0) { // TODO Auto-generated method stub } public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } public void mousePressed(MouseEvent arg0) { JTable table = (JTable)arg0.getSource(); int row =table.getSelectedRow(); int column = table.getSelectedColumn(); String name = table.getValueAt(row,column).toString(); if (arg0.getClickCount()==2) { ShowDialog d = new ShowDialog(null,name); } } public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub }}); t.setCellSelectionEnabled(true); t.setDragEnabled(true); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(t); f.setSize(100, 200); f.setLocation(200,200); f.setVisible(true); }}import java.util.Vector;import javax.swing.table.DefaultTableModel;public class CellEditable extends DefaultTableModel { public boolean isCellEditable(int arg0, int arg1) { return false; } public int getColumnCount() { return 1; } public int getRowCount() { return 5; } public Object getValueAt(int row, int column) { Object[] rowData = { "警察", "小偷", "魔怔", "公务员", "商人" }; return rowData[row]; }}import java.awt.Frame;import java.awt.HeadlessException;import javax.swing.JDialog;import javax.swing.JTextArea;public class ShowDialog extends JDialog { private JTextArea text = null; public ShowDialog(Frame arg0, String arg1) throws HeadlessException { super(arg0, arg1); text = new JTextArea(); text.setBounds(40, 40, 130, 60); add(text); setLayout(null); setLocation(500, 500); setSize(200, 200); setVisible(true); }}