2014-07-13 141 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。

相關問題