我的需求是把JtextArea中有很多行的数据,当我点击其中的一行时就把数据显示到一个JtextField中

解决方案 »

  1.   

    并且在JtextArea中把哪行数据删除!请大家帮帮忙,就是不知道那个点击一行数据进行传输!
      

  2.   

    不知道怎么做。。如果是选中那一行还好说,或者不用JtextArea而用JList
      

  3.   

    在你鼠标点击JtextArea时,用getCaretPosition()方法可以取得你的光标位置
    然后从光标位置向前找到第一个遇到的'\n'的位置start,向后也找到第一个遇到的'\n'位置end
    这两个位置中间就是该行的数据,用getText(start,end - start) 取到一个字符串 str当中
    然后用replaceRange("" ,start,end)方法把JtextArea中的这段给删了
    再用setText(str) 写到JtextField中
      

  4.   

    int caretOffset = jtextarea.getCaretPostion();
    int currentLine = jtextarea.getLineOfOffset(caretOffset);
    int lineStart = jtextarea.getLineStartOffset(currentLine);
    int lineEnd = jtextarea.getLineEndOffset(currentLine);
    String currentLineContent = jtextarea.getText().substring(lineStart,lineEnd);jtextfield.setText(currentLineContent);
    jtextarea.replaceRange("",lineStart,lineEnd);
      

  5.   

    要双击的话无非是对MouseListener的处理第一种方法是用Timer来做一个处理,第一次mouseClicked之后启动一个Task将一个标志至上
    在有这个标志的时候,再次mouseClicked,才会触发数据转换的事件
    在一定时间之后,或者是鼠标再次mouseClicked后清除这个标志第二种是比较取巧的方法,每次mouseClicked时,判断光标的位置,如果连续两次一样,就认为是双击另外鉴于mouseClicked事件要求鼠标在按下和弹起的过程中不能有移动,
    建议用mousePressed事件代替mouseClicked事件
      

  6.   

    取巧的方法 private int click = 0;
    private int lastPos = -1;
    private JTextArea area = new JTextArea();
    private JTextField field = new JTextField();

    private void dataTrans() throws BadLocationException {
    int caretOffset = area.getCaretPosition();
    int currentLine = area.getLineOfOffset(caretOffset);
    int lineStart = area.getLineStartOffset(currentLine);
    int lineEnd = area.getLineEndOffset(currentLine);
    String currentLineContent = area.getText().substring(lineStart,lineEnd);
    field.setText(currentLineContent);
    area.replaceRange("",lineStart,lineEnd);
    }

    private void addListener() {
    area.addMouseListener(new MouseAdapter(){
    public void mousePressed(MouseEvent e){
    if (click == 0) {
    click++;
    } else {
    if (lastPos == area.getCaretPosition()) {
    try {
    dataTrans();
    } catch (BadLocationException e1) {
    e1.printStackTrace();
    }
    }
    click = 0;
    }
    lastPos = area.getCaretPosition();
    }
    });
    }
      

  7.   

    用Timer的方式 private int click = 0;
    private int lastPos = -1;
    private JTextArea area = new JTextArea();
    private JTextField field = new JTextField();
    private Timer timer = new Timer();
    private TimerTask task = new TimerTask() {
    public void run() {
    click--;//当第一次点击的时候会给click一个大于0的值
    if (click < 0) {
    click = 0;
    }
    }
    };


    private void dataTrans() throws BadLocationException {
    int caretOffset = area.getCaretPosition();
    int currentLine = area.getLineOfOffset(caretOffset);
    int lineStart = area.getLineStartOffset(currentLine);
    int lineEnd = area.getLineEndOffset(currentLine);
    String currentLineContent = area.getText().substring(lineStart,lineEnd);
    field.setText(currentLineContent);
    area.replaceRange("",lineStart,lineEnd);
    }

    private void addListener() {
    timer.schedule(task, 100, 100);
    area.addMouseListener(new MouseAdapter(){
    public void mousePressed(MouseEvent e){
    if (click > 0) {
    if (lastPos == area.getCaretPosition()) {
    try {
    dataTrans();
    } catch (BadLocationException e1) {
    e1.printStackTrace();
    }
    }
    click = 0;
    } else {
    click = 10;//当第一次点击的时候给click赋值10,这相当于1秒,在这1秒内再次点击就认为是双击
    }
    lastPos = area.getCaretPosition();
    }
    });
    }