JTable中对单元格的输入进行判断,如果输入为空就将光标锁定在这个单元格中,也就是只有这个单元格可编辑其他的不可以。怎么实现啊??

解决方案 »

  1.   

    利用setInputVerifier()这个方法,例如:
     import java.awt.*;
     import java.util.*;
     import java.awt.event.*;
     import javax.swing.*;
     
     public class VerifierTest extends JFrame {
         public VerifierTest() {
             JTextField tf1 = new JTextField ("输入 \"pass\" 才能释放焦点");
               getContentPane().add (tf1, BorderLayout.NORTH);
               tf1.setInputVerifier(new PassVerifier());
     
               JTextField tf2 = new JTextField ("TextField2");
               getContentPane().add (tf2, BorderLayout.SOUTH);
     
               WindowListener l = new WindowAdapter() {
                   public void windowClosing(WindowEvent e) { 
                       System.exit(0); 
                   }
               };
               addWindowListener(l);
         }
     
         class PassVerifier extends InputVerifier {
             public boolean verify(JComponent input) {
                   JTextField tf = (JTextField) input;
                   return "pass".equals(tf.getText());
             }
         }
     
         public static void main(String[] args) {
             Frame f = new VerifierTest();
               f.pack();
               f.setVisible(true);
         }
     }
      

  2.   

    放在Table里不好用啊...怎么回事呢??
      

  3.   

    如果放在table的话就比较麻烦了,要重写cellRender和cellEditor,还有tableModel。
      

  4.   

    都重写了就是不知道该把setInputVerifier(new PassVerifier());放在哪写啊?
      

  5.   

    如果要实现这个功能,你需要自定义一个类,这个类要继承JTextField,实现cellEditor接口,此时由于它继承了JTextField类,就可以用setInputVerifier方法了。
      

  6.   

    例如
    TableColumn sportColumn = table.getColumnModel().getColumn(2);
    ...
    JTextField text = new JTextField();
    text.setInputVerifier(verifier);sportColumn.setCellEditor(new DefaultCellEditor(text));应该也可以,试试吧
      

  7.   

    在TableModel中去改写.
    public boolean isCellEditable(int row, int column) {
            return false;//false表示这个单元格不能编辑,
        }
      

  8.   

    关键就是这个设定焦点的方法 我用了requestFocus()方法也不好用。
      

  9.   

    我现在有个方法可以一试但就不会把鼠标禁用.
    请问哪位高手能告诉我java中可有把鼠标禁用的方法啊?有的话告诉我什么方法。哭求了!
      

  10.   

    wzlsquall(亮亮),你好你的方法我试验过了还是没其作用.
    谢谢你的支持,又学到新知识。但我的问题依然存在啊
      

  11.   

    package com.test.jtable;import java.awt.BorderLayout;
    import java.awt.Component;import javax.swing.DefaultCellEditor;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.table.DefaultTableModel;
    import javax.swing.table.TableColumn;
    import javax.swing.table.TableColumnModel;public class CellEditorNotNull extends JFrame
    {
    public CellEditorNotNull()
    {
    super("Table");
    String value[][]={
    {"1","2","3","4","5"}
    };
    String columnName[]={"col1","col2","col3","col4","col5"};

    DefaultTableModel model=new DefaultTableModel(value,columnName);
    JTable table=new JTable(model);
    TableColumnModel colmodel=table.getColumnModel();
    for(int index=0;index<columnName.length;index++)
    {
    TableColumn tc = colmodel.getColumn(index);
    JTextField editor=new JTextField();
    MyCellEditor cellEditor=new MyCellEditor(editor);
    cellEditor.setClickCountToStart(1);
    tc.setCellEditor(cellEditor);
    }
    this.add(new JScrollPane(table),BorderLayout.CENTER);
    this.setSize(300, 200);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setVisible(true);
    }

    public static void main(String args[])
    {
    new CellEditorNotNull();
    }
    }class MyCellEditor extends DefaultCellEditor
    { public MyCellEditor(JTextField textField) {
    super(textField);
    // TODO Auto-generated constructor stub
    }

    public boolean stopCellEditing()
    {
    String value=(String)this.getCellEditorValue();
    if(value.equals(""))
    {
    ((JTextField)this.getComponent()).requestFocus();
    return false;
    }
    else 
    return super.stopCellEditing();

    }
    }
    重写单元格编辑器的stopCellEditing()方法就可以了。希望能满足你的要求
      

  12.   

    谢谢UNDEAD_YANG() 你的方法就是我想要的 非常感谢!