2011-04-04 47 views
3

我正在使用包含名为Subject的列的可编辑JTable。当第一行为空并且用户单击主题单元格以添加新任务时,默认情况下,用户必须单击两次以使单元格可编辑。我想通过单击将其设置为可编辑状态,并通过双击打开另一个窗体。我试过MouseListener,但一直无法解决它。有没有办法解决这个问题?如果是这样,那是什么?如何使一个JTable单元在单击上执行不同的操作而不是双击?

我的代码:

class mouseRenderer extends DefaultTableCellRenderer { 
    JLabel lblcell = new JLabel(); 

    public Component getTableCellRendererComponent(JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, 
      int column) { 
     ttable.addMouseListener(new MouseAdapter() { 
      public void mouseClicked(MouseEvent e) { 
       selrow = ttable.getSelectedRow(); 
       selcol = ttable.getSelectedColumn(); 

       if(e.getClickCount() == 1) { 
        if(selrow == 0) { 
         lblcell.setText(""); 
        } 
       } 
      } 
     }); 
     return lblcell; 
    } 
} 

回答

5

对于一键编辑,您可以尝试在jtable中使用celleditor的'setClickCountToStart()'方法。

+0

呵呵好吧....谢谢..试试.. – bsm 2011-04-04 11:25:14

+0

如果编辑器的类型是DefaultCellEditor(默认注册的那些) – kleopatra 2011-04-04 12:19:34

+0

非常感谢..现在它的工作.. – bsm 2011-04-04 13:33:34

0

MouseListener是去上连续捕获双击的方式。它应该工作正常。

只要单击一次即可编辑,您可能希望使用MouseMotionListener选择行并让JTable采用单击进行编辑。另一个选择可能是使用MouseListener来检测被单击的单元格,但这会变得有点麻烦。

+0

由于设置..让我试试MouseMotionListener.But的我没有得到如何使JTable中仅通过单次点击编辑。让我再尝试一次。 – bsm 2011-04-04 11:23:17

4

您可以尝试创建这样一个自定义CellEditor中,并与setCellEditor()

public class MyTableCellEditor extends AbstractCellEditor implements TableCellEditor { 

    public boolean isCellEditable(EventObject evt) { 
     if (evt instanceof MouseEvent) { 
      int clickCount; 

      // For single-click activation 
      clickCount = 1; 

      // For double-click activation 
      clickCount = 2; 

      // For triple-click activation 
      clickCount = 3; 

      return ((MouseEvent)evt).getClickCount() >= clickCount; 
     } 
     return true; 
    } 
} 
相关问题