如何在java中使一个完整的列不可选?

时间:2011-10-28 10:43:43

标签: java swing jtable

我正在使用netbeans进行我的java项目。我想使除一列之外的整列不可选。用户应该只能在一列中单击行。怎么做?

2 个答案:

答案 0 :(得分:4)

您可以将ListSelectionListener添加到您的表中。如果当前选择是不可选择的列,则可以撤消选择。这是一个例子:

public class MyTable extends JTable(){
    //the column to disable
    //... and the currently selected column
    private int disabled_col = 2, cur_col = 0;

    public MyTable(){
        //Create a column selection listener
        final ListSelectionModel sel = this.getColumnModel().getSelectionModel();
        sel.addListSelectionListener(new ListSelectionListener(){
            @Override
            public void valueChanged(ListSelectionEvent e) {
                //If the column is disabled, reselect previous column
                if (sel.isSelectedIndex(disabled_col))
                    sel.setSelectionInterval(cur_col,cur_col);
                //Set current selection
                else cur_col = sel_mod1.getMaxSelectionIndex();
            }
        });
    }
}

此代码不处理多个已禁用的列或跨多个列的选择。你必须修改它来处理这些情况。

答案 1 :(得分:2)

使用setColumnSelectionAllowed(false);并为其设置首选列,应该有效。 我想我在最近的项目中使用了JTable。

“列选择”控制columnSelectionAllowed,其中包含setter方法setColumnSelectionAllowed和getter方法getColumnSelectionAllowed。当此绑定属性为true(并且rowSelectionAllowed绑定属性为false)时,用户可以按列进行选择。

来自http://download.oracle.com/javase/tutorial/uiswing/components/table.html