我想使JTable变灰,就像使用JTextField.setEnabled(false)一样,但是用JTable.setEnabled(false)却没效果,到网上搜索了大片的资料,似乎没有一个很好的解决办法,请大家指教一下

解决方案 »

  1.   

    不清楚誒~   估計要設定字體的顏色吧~~   jctable應該很好實現~  但是jtable就不知道了~
      

  2.   

    楼主的意思是想让JTable中的单元格不可编辑吧?
    JTable中单元格是否可以编辑,是由其isCellEditable()方法决定的。更准确的说法是由其TableModel的isCellEditable()方法决定的。
    所以要想让JTable中的单元格不可编辑,必须重写JTable或其TableModel的isCellEditable()方法。该方法可以根据需要,控制全表、某行、某列甚至某个单元格可否被编辑。
    以下是一个简单的例子,让全表的单元格都不可以被编辑:import javax.swing.*;
    import javax.swing.table.*;public class MainFrame extends JFrame {

    private Object[][] data = {
    {"张三", "[email protected]"},
    {"李四", "[email protected]"}
    };

    private String[] columnNames = { "姓名", "邮箱" };

    private TableModel tableModel = new DefaultTableModel(data, columnNames){
    public boolean isCellEditable(int row, int column) {
    //限制所有单元格不可编辑
    return false;
    //如果要限制第一列不可编辑,则可以这样写
    //return column != 0;
    }
    };
    private JTable tblEmp = new JTable(tableModel);
    private JPanel contentPane;

    public MainFrame()
    {
    super("不可编辑的表格");
    setSize(400,300);
    //
    contentPane = (JPanel) getContentPane();
    JScrollPane pnlMain =new JScrollPane(tblEmp);
    contentPane.add(pnlMain);

    } public static void main(String[] args) {
    MainFrame f = new MainFrame();
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLocationRelativeTo(null);
    f.setVisible(true);
    }
    }
      

  3.   

    回楼上各位,你们提到的办法我都想到了,但没有想到一个问题:如果JTable上绑定了事件的话,那你们的方法就不行了。
    我想要JTable变灰,就是想让绑定在JTable上的事件失效。
      

  4.   

    to horizonlyhw :
    jctable是什么控件,有没有源码?
      

  5.   


    绑定在JTable上的事件?JTable本身就已经具备的功能?楼主莫非想让JTable没法点击(或选中)?还是别的什么需求?
      

  6.   

    jtable.setEnabled(false);这样设置成不可编辑的话,绑定在jtable上的事件还能用吗?好像不行吧?
      

  7.   

       恩 要重写它的方法 isCelling方法   如果是列和行不可编辑的话 
      

  8.   

    回accp206,我在JTable上添加了MouseListener,单击JTable的行,行中的数据就填到JTextField中,然后可以在JTextField中进行数据的修改,同时JTable要置为没法点击的状态;再点击"提交"按钮,将修改后的数据提交到数据库,同时JTable设置为可以点击的状态.
    你说的让JTable没法点中,这正是我想要的效果。
      

  9.   


    JTable.setEnabled(false)后,绑定在JTable上的事件还是能够被触发,我测试过了的
      

  10.   


    楼上的没仔细看需求,不是让JTable不可编辑,而是让JTable不可被点击.
      

  11.   


    在你的MouseListener中做个判断,只有JTable的isEnabled()返回true时才进行操作,即可。
    这样,当你对JTable进行setEnabled(false)之后,虽然你的监听器还在工作,但已不会做出处理啦。
      

  12.   

    要不然,你就只能频繁地removeMouseListener,然后在需要时再addMouseListener,那就太笨拙啦。呵呵。
      

  13.   

    是啊,想过removeMouseListener,也是嫌太麻烦,所以不想这么写,不知道有什么更好的办法!!
    唉!想想这个swing的JTable,连个最平常的enabled都不支持,而这个JTable 是最常用的一个组件。
    不知道还有社么办法解决,
    bwt:不想把这个功能做得太复杂,因为这是setEnabled是最常用的功能啊
      

  14.   

    是个好办法,应该是可以控制JTable事件的触发,但,界面上不好看,因为JTable还是很够被点击,只是点击后不能触发事件
      

  15.   

    上面太长了就不看了,完成你的第一个目的变灰色
    上面好像有兄弟说了禁用cell或者改变颜色,这个容易想到
    完成你的第二个目的,disabled
    在jtable上面做事件监听,做个变量用于保持当前jtable是否是disabled状态
    在事情里面判断下如果是的话
    事件就直接return就行了