import java.util.*; 
import java.awt.*;
import javax.swing.*;
import javax.swing.table.*;
public class VectorDemo extends JFrame{ 
        JTable jt;
    JScrollPane sp;
    DefaultTableModel dm;
    
  public VectorDemo(Vector d,Vector v){
       this.setSize(400,400);
       this.setDefaultCloseOperation(3);
       dm=new DefaultTableModel(d,v);
       
       jt=new JTable(dm);
     sp=new JScrollPane(jt);
     this.add(sp);
     this.setVisible(true);
}
   public static void main(String[] args){ 
  
    
  
     Vector v = new Vector(); 
   v.add("v1"); 
   v.add("v2"); 
   v.add("v3"); 
  Vector d=new Vector();
    for(int i=0;i<4;i++){
     Vector temp=new Vector();
     for(int j=0;j<3;j++){
     temp.add(i+j);
     }
     d.add(temp);
    }
    
    new VectorDemo(d,v);
    
  
    
  
 } 

如何使JTable中的内容不能编辑?
咱是新手,请各位高人指点,谢谢!

解决方案 »

  1.   


    class myedit extends AbstractCellEditor implements TableCellEditor { public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
    return this.getTableCellEditorComponent(table, value, isSelected, row, column);
    } public Object getCellEditorValue() {
    return null;
    } public boolean isCellEditable(EventObject e) {
    return false;
    } }使用方法:
    jTable1.setDefaultEditor(Object.class, new myedit());
      

  2.   

    我已经搞定,我是这样写的:
        class EditTable extends DefaultTableModel {              
             public EditTable (Vector d,Vector n){
                  super(d,n);}
            public boolean isCellEditable(int r,int c) { 
                 return false; 
               } 
     
    }
        
      
        EditTable et=new EditTable(d,v); 
        JTable tb=new JTable(et);
     
    非常感谢你的指点,我会把分全部给你的.
    我有个问题,想问一下,在Jtable在如何判断鼠标单击还有双击,我用了getClickCount()==1和getClickCount()==2没有任何反应,希望给指点一下,谢谢!
      

  3.   

    给你个例子package test.table;import java.awt.Dimension;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.Vector;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.table.AbstractTableModel;
    import javax.swing.table.DefaultTableModel;public class JTableTest extends JFrame { class TableTableModel extends DefaultTableModel {
      /**
       * 
       */
      private static final long serialVersionUID = 679265889547674796L;
      public final String[] COLUMN_NAMES = new String[] {"列0", "列1", "列2", "列3"};
      
      public TableTableModel()
      {
      }  public int getColumnCount() {
       return COLUMN_NAMES.length;
      }
      public String getColumnName(int columnIndex) {
       return COLUMN_NAMES[columnIndex];
      }
      // 将Table设成只读的
      public boolean isCellEditable(int row,
                    int column)
      {
       return false;
      }
     } private JTable table;
     private int i = 0;
     private int j = 0;
     private int rowI = -1;
     /**
      * Launch the application
      * @param args
      */
     public static void main(String args[]) {
      try {
       JTableTest frame = new JTableTest();
       frame.setVisible(true);
      } catch (Exception e) {
       e.printStackTrace();
      }
     } /**
      * Create the frame
      */
     public JTableTest() {
      super();
      setTitle("JTable Test");
      getContentPane().setLayout(null);
      setBounds(100, 100, 500, 375);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  final JScrollPane scrollPane = new JScrollPane();
      scrollPane.setBounds(10, 28, 460, 271);
      getContentPane().add(scrollPane);  table = new JTable();
      table.setShowGrid(true);
      table.addMouseListener(new UserMouseAdapter() {
       /** *//**
          * 鼠标单击事件
          * @param e 事件源参数
          */
       public void mouseSingleClicked(MouseEvent e){
           //System.out.println("Single Clicked!");
        rowI  = table.rowAtPoint(e.getPoint());// 得到table的行号
        if (rowI > -1)
            System.out.println("单击鼠标 "+((TableTableModel)table.getModel()).getValueAt(rowI, 0));
         }     /** *//**
          * 鼠标双击事件
          * @param e 事件源参数
          */
         public void mouseDoubleClicked(MouseEvent e){
           //System.out.println("Doublc Clicked!");
          rowI  = table.rowAtPoint(e.getPoint());// 得到table的行号
         if (rowI > -1)
             System.out.println("双击鼠标 "+((TableTableModel)table.getModel()).getValueAt(rowI, 0));
         }
         
      });
      table.setModel(new TableTableModel());
      scrollPane.setViewportView(table);  final JButton button = new JButton();
      button.addMouseListener(new MouseAdapter() {
       public void mouseClicked(MouseEvent arg0) {
        ((TableTableModel)table.getModel()).addRow(new String[] {"行"+(i++),"含一","行2","行3"});
       }
      });
      button.setText("添加一行");
      button.setBounds(10, 308, 99, 23);
      getContentPane().add(button);  final JButton button_1 = new JButton();
      button_1.addMouseListener(new MouseAdapter() {
       public void mouseClicked(MouseEvent arg0) {
        ((TableTableModel)table.getModel()).insertRow((rowI>=0?rowI:0),new String[] {"插入行"+(j++),"插入行1","插入行2","插入行3"});
       }
      });
      button_1.setText("插入行");
      button_1.setBounds(121, 308, 99, 23);
      getContentPane().add(button_1); }}
    //UserMouseAdapter.javapackage test.table;import java.awt.event.*;
    /**
     *用定时器延时单击事件实现鼠标双击事件,单击和双击事件互不影响! 
     */
    public class UserMouseAdapter
        extends java.awt.event.MouseAdapter {
     
      private boolean flag=false;//用来判断是否已经执行双击事件
      private int clickNum=0;//用来判断是否该执行双击事件  public void mouseClicked(MouseEvent e) {
          final MouseEvent me=e;//事件源      this.flag=false;//每次点击鼠标初始化双击事件执行标志为false      if (this.clickNum == 1) {//当clickNum==1时执行双击事件
            this.mouseDoubleClicked(me);//执行双击事件
            this.clickNum=0;//初始化双击事件执行标志为0
            this.flag=true;//双击事件已执行,事件标志为true
            return;
          }      //定义定时器
          java.util.Timer timer=new java.util.Timer();      //定时器开始执行,延时0.2秒后确定是否执行单击事件
          timer.schedule(new java.util.TimerTask(){
            private int n=0;//记录定时器执行次数
            public void run() {
              if(flag){//如果双击事件已经执行,那么直接取消单击执行
                n=0;
                clickNum=0;
                this.cancel();
                return;
              }
              if (n == 1) {//定时器等待0.2秒后,双击事件仍未发生,执行单击事件
                mouseSingleClicked(me);//执行单击事件
                flag = true;
                clickNum=0;
                n=0;
                this.cancel();
                return;
              }
              clickNum++;
              n++;
            }
          },new java.util.Date(),200); // 设置延迟时间
        }    /** *//**
         * 鼠标单击事件
         * @param e 事件源参数
         */
        public void mouseSingleClicked(MouseEvent e){
          //System.out.println("Single Clicked!");
        }    /** *//**
         * 鼠标双击事件
         * @param e 事件源参数
         */
        public void mouseDoubleClicked(MouseEvent e){
          //System.out.println("Doublc Clicked!");
        }
    }