新建一个JTable,在录入数据以后,如果第二列的数据和第一列相同,则第二列不可编辑,否则都可以编辑,请问有肯能实现吗?

解决方案 »

  1.   

    an example:
    package swing;
    import java.awt.BorderLayout;
    import java.awt.Dimension;import javax.swing.JFrame;
    import javax.swing.JTable;
    import javax.swing.table.DefaultTableModel;public class MyTable extends JFrame{

    public MyTable() {
    this.setLayout(new BorderLayout());
    this.setSize(new Dimension(400,300));
    final String[][] data = new String[][]{
    {"1","1"},
    {"2","4"},
    {"3","3"},
    {"4","5"},
    };
    String[] columnNames =  new String[]{"C1","C2"};
    DefaultTableModel model = new DefaultTableModel(data,columnNames){
    @Override
    public boolean isCellEditable(int row, int column) { 
    return !(column==1 && data[row][0].equals(data[row][1])); 

    };
    JTable table = new JTable();
    table.setModel(model);
    this.add(table, BorderLayout.NORTH);
    this.setVisible(true);
    }
    public static void main(String[] args){
    MyTable mt = new MyTable();
    }}
      

  2.   


    import java.awt.*;
    import java.awt.event.*;
    import java.util.Vector;import javax.swing.*;
    import javax.swing.table.DefaultTableModel;public class TestTable extends JFrame {
        JTable tb = new JTable();
        JPanel p = new JPanel();
        Vector columnNames = new Vector();
        Vector rowData = new Vector();
        MyTableModel_Mold_BOM tablemodel;
        boolean []; 
        public TestTable() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocation(112, 0);
            setSize(700, 420);
           
            columnNames.add("檔案號");
            columnNames.add("姓名");
            columnNames.add("年齡");
            columnNames.add("性別");
            columnNames.add("婚姻狀況");
            columnNames.add("職業");
            columnNames.add("聯系電話");
            
            
            Vector row1 = new Vector();
            row1.add("010110");
            row1.add("張三");
            row1.add("28");
            row1.add("男");
            row1.add("已婚");
            row1.add("教師");
            row1.add("13686562936");
            rowData.add(row1);        Vector row2 = new Vector();
            row2.add("010110");
            row2.add("李四");
            row2.add("28");
            row2.add("男");
            row2.add("已婚");
            row2.add("教師");
            row2.add("13686562936");
            rowData.add(row2);
            
            Vector row3 = new Vector();
            row3.add("010110");
            row3.add("張三");
            row3.add("28");
            row3.add("男");
            row3.add("已婚");
            row3.add("sdfsdf");
            row3.add("13686562936");
            rowData.add(row3);
            
            tablemodel = new MyTableModel_Mold_BOM(rowData, columnNames);
            tb = new JTable(tablemodel);
             = new boolean[rowData.size()];
            for (int i=0 ; i<.length ; i++){
             [i] = false;
            }
            tb.setPreferredScrollableViewportSize(new Dimension(639, 232));
            tb.setRowHeight(20);
            tb.setRowSelectionAllowed(true);
            tb.setSelectionBackground(Color.lightGray);
            tb.setSelectionForeground(Color.white);
            tb.setGridColor(Color.black);
            tb.setShowGrid(true);
            tb.setShowHorizontalLines(true);
            tb.setShowVerticalLines(true);
            tb.setBackground(Color.white);
            JScrollPane pane = new JScrollPane(tb);
            pane.setBackground(Color.white);
            p.add(pane);
            add(p);
            setVisible(true);
        }    
        
        class MyTableModel_Mold_BOM extends  DefaultTableModel{
        
        
            public MyTableModel_Mold_BOM(Vector data,Vector columns){
                super(data,columns);
            }
            
            public void flag_(){
             for (int i=0 ; i<rowData.size() ; i++){
             Vector vec = (Vector) rowData.get(i);
             if (vec.get(1).toString().equals("張三")){
                 [i] = true;
                    }
             }
            }
            public   boolean   isCellEditable(int   row,int   column){
             if (column == 3){
             flag_();
             return [row];}
             return false;
            }
            public Class<?> getColumnClass(int columnIndex) {            return Object.class;
            }
        }
        public static void main(String args[]) {
        
            new TestTable();
        }
    }你看看這個代碼    如果是張三   那么年齡可編輯    類似的~~~
      

  3.   

    1,为你的jtable设置监听 
    jTable1.addKeyListener(new java.awt.event.KeyAdapter() { 
          public void keyPressed(KeyEvent e) { 
            jTable1_keyPressed(e);//处理方法 
          } 
        }); 
    2,实现处理方法. 
    void jTable1_keyPressed(KeyEvent e){ 
        JTable jtab1 = (JTable) e.getSource(); 
        int key = e.getKeyCode(); 
        
        int c = jtab1.getSelectedColumn();//获取修改列 
        int r = jtab1.getSelectedRow();//获取修改行 
        String sdb = "";//这个值是从数据库获取过来的. 
        String  stable = (String) jtab1.getValueAt(r,jTable1.convertColumnIndexToView("这里是你的表中修改列的列名")) 
        boolean change = sdb != stable; 
        if(change){ 
        //第二列不可编辑 
        ...... 
        
      }      
    }
      

  4.   

    可以啊~  加監聽~~ 用setValueAt~~  
      

  5.   

    可以给个例子吗?我用的 defaultTableModel.addTableModelListener(new TableModelListener() {
                                public void tableChanged(TableModelEvent e) {
                                //事件
                                }
                         });
    但是没办法实现
      

  6.   


    import java.awt.Color;
    import java.awt.Dimension;
    import java.util.Vector;import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTable;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.DefaultTableModel;public class TestTable extends JFrame {
        JTable tb = new JTable();
        JPanel p = new JPanel();
        Vector columnNames = new Vector();
        Vector rowData = new Vector();
        MyTableModel_Mold_BOM tablemodel;
        boolean []; 
        public TestTable() {
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocation(112, 0);
            setSize(700, 420);
           
            columnNames.add("檔案號");
            columnNames.add("姓名");
            columnNames.add("年齡");
            columnNames.add("性別");
            columnNames.add("婚姻狀況");
            columnNames.add("職業");
            columnNames.add("聯系電話");
            
            
            Vector row1 = new Vector();
            row1.add("010110");
            row1.add("張三");
            row1.add("28");
            row1.add("男");
            row1.add("已婚");
            row1.add("教師");
            row1.add("13686562936");
            rowData.add(row1);        Vector row2 = new Vector();
            row2.add("010110");
            row2.add("李四");
            row2.add("28");
            row2.add("男");
            row2.add("已婚");
            row2.add("教師");
            row2.add("13686562936");
            rowData.add(row2);
            
            Vector row3 = new Vector();
            row3.add("010110");
            row3.add("張三");
            row3.add("28");
            row3.add("男");
            row3.add("已婚");
            row3.add("sdfsdf");
            row3.add("13686562936");
            rowData.add(row3);
            
            tablemodel = new MyTableModel_Mold_BOM(rowData, columnNames);
            tb = new JTable(tablemodel);
             = new boolean[rowData.size()];
            for (int i=0 ; i<.length ; i++){
             [i] = false;
            }
            
            tablemodel.addTableModelListener(new TableModelListener(){ public void tableChanged(TableModelEvent e) {
    Vector vec_row =  (Vector) rowData.get(e.getLastRow());
    String str = vec_row.get(e.getColumn()).toString();
    ((Vector)rowData.get(e.getLastRow())).set(e.getColumn()+1,str);

    }
            
            });
            
            tb.setPreferredScrollableViewportSize(new Dimension(639, 232));
            tb.setRowHeight(20);
            tb.setRowSelectionAllowed(true);
            tb.setSelectionBackground(Color.lightGray);
            tb.setSelectionForeground(Color.white);
            tb.setGridColor(Color.black);
            tb.setShowGrid(true);
            tb.setShowHorizontalLines(true);
            tb.setShowVerticalLines(true);
            tb.setBackground(Color.white);
            JScrollPane pane = new JScrollPane(tb);
            pane.setBackground(Color.white);
            p.add(pane);
            add(p);
            setVisible(true);
        }    
        
        class MyTableModel_Mold_BOM extends  DefaultTableModel{
        
        
            public MyTableModel_Mold_BOM(Vector data,Vector columns){
                super(data,columns);
            }
            
            public void flag_(){
             for (int i=0 ; i<rowData.size() ; i++){
             Vector vec = (Vector) rowData.get(i);
             if (vec.get(1).toString().equals("張三")){
                 [i] = true;
                    }
             }
            }
            public   boolean   isCellEditable(int   row,int   column){
             if (column == 3){
             flag_();
             return [row];}
             return false;
            }
            public Class<?> getColumnClass(int columnIndex) {            return Object.class;
            }
        }
        public static void main(String args[]) {
        
            new TestTable();
        }
    }還是上面的那個例子     你看看能參考下不     改變張三的性別  鼠標點出去一下 后一列的數值也變化了 
      

  7.   

     horizonlyhw 兄,用你的例子运行了下,发现没你说的效果呢?改变“张三”的性别并不会引起其他某列的变化,怎么回事?