2014-07-13 103 views
4

我在代码中重写了JTable类的isCellEditable()方法,以使我的JTable的单元格不可编辑但可选,但单元格仍可编辑。我该如何解决这个问题?如何使JTable的单元格不可编辑但可选

import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.DefaultTableModel; 

public class A extends JTable{ 

    JFrame frame = new JFrame(); 
    Object data[][] = {{"1","Jahanzeb"},{"2","Ahmed"},{"3","Shaikh"}}; 
    String col[] = {"#","Names"}; 
    DefaultTableModel tableModel = new DefaultTableModel(data, col); 
    JTable table = new JTable(tableModel); 
    JScrollPane scroll = new JScrollPane(table); 

    public static void main(String arg[]){ 
     new A(); 
    } 

    public A() { 

     table.addMouseListener(new Click()); 
     table.setModel(tableModel); 
     frame.setSize(500,500); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.add(scroll); 
     frame.add(table); 
     frame.setVisible(true); 
    } 


    @Override 
    public boolean isCellEditable(int row, int column){ 
     return false; 
    } 

    class Click extends MouseAdapter{ 
     public void mouseClicked(MouseEvent e) { 
      if(e.getClickCount()==2) 
       System.out.println(table.getSelectedRow()); 
     } 
    } 
} 
+4

其时间你学会了如何正确使用论坛。您不只是在同一主题上发布问题(http://stackoverflow.com/a/24726385/131872)。把谈话保持在一个线程中,这样每个人都知道建议的内容。此外,你已经提出了12个问题,而不是一次你接受了答案。 – camickr

回答

2

你加入另一个JTable在你的代码,你的一个延伸,另一个添加到JFrame之间的混乱!

固定上述后添加这些调用:

table.setFocusable(false); 
table.setRowSelectionAllowed(true); 
+0

看看更新 – GingerHead

8

我相信你需要重写为TableModel的的isCellEditable()方法,而不是JTable的,就像这样:

public class NonEditableModel extends DefaultTableModel { 

    NonEditableModel(Object[][] data, String[] columnNames) { 
     super(data, columnNames); 
    } 

    @Override 
    public boolean isCellEditable(int row, int column) { 
     return false; 
    } 
} 

这是也可以简单地使用匿名类来覆盖该方法。

DefaultTableModel tableModel = new DefaultTableModel(data, col) { 

    @Override 
    public boolean isCellEditable(int row, int column) { 
     return false; 
    } 
} 

这个问题说明了如何进行覆盖内联,这是方便,如果你只需要一次实例化的TableModel: How to make a JTable non-editable

2

你的类继承的JTable并且覆盖了isCellEditable(...)方法。

但是,然后你创建一个新的JTable,你添加到框架,你不覆盖该JTable的isCellEditable(..)方法。

如果要扩展JTable,则不要在该类中创建新的JTable。

相关问题