日期:2014-05-20  浏览次数:20999 次

急问GUI中jtextarea 中的鼠标事件(在线等。。。)
我仿照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);

    }

}