说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

180分 请教

编辑:说三道四文库 发布时间:2018-05-27 08:12
HTML文档下载 WORD文档下载 PDF文档下载

请教 JTable 的困难问题:
    
    设置jTable的CellEditor为JTextField。 clickCountToStart
设置为0或1。用鼠标单击选中即出现可以编辑的光标,编辑完毕,
按Tab键或箭头键移到下一个Cell,却不出现可以编辑的光标(此
时也能编辑)。

请问高手们如何处理 才能 出现 光标!
非常感谢!

http://www.csdn.net/expert/topic/128/128006.shtm 有50分
我想知道呀,高手快来呀!
关于这个问题我已查了好多资料了,但还是没有找到解决方法,
主要可能是由于JTable的开始编辑是由mouseclick来触发,所以可能键盘无法响应,
我想可能 的解决方法就是检测用户按下tab键后就模拟触发一次mouseclick事件,
看行不行了。
我想可能 的解决方法就是检测用户按下tab键后就模拟触发一次mouseclick事件
同意
!!
这么高深的问题看来不适合菜鸟级的我
to:skyyoung(路人甲) 
你觉得触发mouseclick事件可行吗?
怎么来触发呢,这可没有触发键方便哦!
触发mouseclick事件也许可以,但怎样定位位置?
请继续讨论?
老外可有讨论?
明天早上给你答复,我先回去了,呵呵
5
虽然我不会,帮你up一下
去sun的论坛上看看呗
java.awt.Robot

This class is used to generate native system input events for the purposes of test automation, self-running demos, and other applications where control of the mouse and keyboard is needed. 

Check the JDK document to find out how to do .Good luck!
import java.awt.*;
import javax.swing.*;

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

public class TableTest extends JFrame
{
  JTable jTable1 = new JTable(3,4);

  public TableTest()
  {
    try 
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }

  public static void main(String[] args)
  {
    TableTest tableTest1 = new TableTest();
    tableTest1.show();
  }

  protected void processWindowEvent(WindowEvent e){
    if(e.getID()==e.WINDOW_CLOSING){
     System.exit(0);
    }
    super.processWindowEvent(e);
  }


  private void jbInit() throws Exception
  {
    this.setSize(300,400);
    this.getContentPane().add(jTable1, BorderLayout.CENTER);
   
    ListSelectionListener listener =  new MySelectionListner();
    jTable1.getSelectionModel().addListSelectionListener(listener);
    jTable1.getColumnModel().getSelectionModel().addListSelectionListener(listener);
  }

  class MySelectionListner implements ListSelectionListener{
    public void valueChanged(ListSelectionEvent e){
       if(e.getValueIsAdjusting())
        return ;
       if(e.getLastIndex()==e.getFirstIndex())
        return;
       int row = jTable1.getSelectedRow();
       int col = jTable1.getSelectedColumn();
       System.out.println("selected row is :"+row+" selected column " + col);
       if(row>=0&&col>=0)
        {
        jTable1.editCellAt(row,col);
        System.out.println("aaaaaa");
        }
    }
  }

 
}

抱歉,来完了,给我分:)
兄弟先try一下,定会给分,
请漂流兄先到下面的帖子随便回复一下,我好给分。
谢谢!!!

http://www.csdn.net/expert/topic/128/128006.shtm 
漂流兄,为何还是没有光标??(可以编辑)

漂流兄能否再指点一下
那样已经在编辑状态,还需要光标干什么?:)
我给你测测去
import java.awt.*;
import javax.swing.*;

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


public class TableTest extends JFrame
{
  JTable jTable1 = new JTable(3,4);

  public TableTest()
  {
    try 
    {
      jbInit();
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }

  public static void main(String[] args)
  {
    TableTest tableTest1 = new TableTest();
    tableTest1.show();
  }

  protected void processWindowEvent(WindowEvent e){
    if(e.getID()==e.WINDOW_CLOSING){
     System.exit(0);
    }
    super.processWindowEvent(e);
  }


  private void jbInit() throws Exception
  {
    this.setSize(300,400);
    this.getContentPane().add(jTable1, BorderLayout.CENTER);
   
    ListSelectionListener listener =  new MySelectionListner();
    jTable1.getSelectionModel().addListSelectionListener(listener);
    jTable1.getColumnModel().getSelectionModel().addListSelectionListener(listener);
  }

  class MySelectionListner implements ListSelectionListener{
    int lastRow,lastCol;
    public void valueChanged(ListSelectionEvent e){
     /*  if(e.getValueIsAdjusting())
       {
        System.out.println("value is adjusting!!");
        return ;
       } */


       int row = jTable1.getSelectedRow();
       int col = jTable1.getSelectedColumn();
       if(lastRow==row && lastCol==col)
       {
        System.out.println("The same Cell");
        return;
       }

       jTable1.getCellEditor(lastRow,lastCol).cancelCellEditing();
       System.out.println("selected row is :"+row+" selected column " + col);
       if(row>=0&&col>=0)
        {
          jTable1.editCellAt(row,col);
          TableCellEditor cellEditor = jTable1.getCellEditor(row,col);
          Component component = cellEditor.getTableCellEditorComponent
                          (jTable1,jTable1.getValueAt(row,col),true,row,col);
          component.requestFocus();
        }
    }
  }
 
}

这样可以在同一列中获得光标,可是不能用键盘换到不同列,我现在没时间,下午再看看问题出在哪儿
如果你重载了editor,看一看你的getcellcomponent(),这一行,返回的是不是textedit,如果不是,这个方法有点问题.
为了检查是不是没有单击就不出现textedit,clickCountToStart设为2,看看双击会不会出现这样的问题.
Sorry , try后就给分

谢谢 javafounder(漂流) bootcool(bootcool) 及所有弟兄
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘