import javax.swing.*;
import javax.swing.table.*; public class MainFrame extends JFrame { private Object[][] data = { {"内容", "必选"}, {"内容", "可选"}
}; private String[] columnNames = {"内容", "选择性"}; private TableModel tableModel = new DefaultTableModel(data, columnNames) { public boolean isCellEditable(int row, int column) {
boolean fal = false; TableModel model = tableModel;
int count = model.getRowCount(); for (int i = 0; i < count; i++) {
String checked = (String) model.getValueAt(i, 0);
if (checked.equals("必选")) {
if (row == i) {
fal = true;
} else {
fal = false;
} } else {
fal = false;
} }
return fal;
} };
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);
}
}
代码如上:
上次提问问题说错了··我的问题是····
当选择性为必选的时候··那么那一行都不允许编辑·····
有人给我了这么一段代码
public boolean isCellEditable(int row, int column) {
TableModel model = tableModel;
if (model.getValueAt(row, column).equals("张三")) {
return false;
}
return true;
}
可是这样只实现了固定的单元格不可编辑····实现的是:当选择性为“必选”的时候··那一行都不允许编辑·····
import javax.swing.table.*; public class MainFrame extends JFrame { private Object[][] data = { {"内容", "必选"}, {"内容", "可选"}
}; private String[] columnNames = {"内容", "选择性"}; private TableModel tableModel = new DefaultTableModel(data, columnNames) { public boolean isCellEditable(int row, int column) {
boolean fal = false; TableModel model = tableModel;
int count = model.getRowCount(); for (int i = 0; i < count; i++) {
String checked = (String) model.getValueAt(i, 0);
if (checked.equals("必选")) {
if (row == i) {
fal = true;
} else {
fal = false;
} } else {
fal = false;
} }
return fal;
} };
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);
}
}
代码如上:
上次提问问题说错了··我的问题是····
当选择性为必选的时候··那么那一行都不允许编辑·····
有人给我了这么一段代码
public boolean isCellEditable(int row, int column) {
TableModel model = tableModel;
if (model.getValueAt(row, column).equals("张三")) {
return false;
}
return true;
}
可是这样只实现了固定的单元格不可编辑····实现的是:当选择性为“必选”的时候··那一行都不允许编辑·····
没必要用循环的在isCellEditable里。
这样修改下,仅供参考: private TableModel tableModel = new DefaultTableModel(data, columnNames)
{
public boolean isCellEditable(int row, int column)
{
TableModel model = tableModel; if (column == 0)
{
String checked = (String) model.getValueAt(row, column + 1);
if (checked.equals("bixuan"))
{
return false;
}
return true;
}
return false;
} };
请问这一句是什么意思···谢谢···
我觉得 第二列 可选行都不能改变。
如果可选行原来是 可选, 但是被你手动改成必选了。
这样就麻烦了。
你可以自己想想,该怎么改。
if (column == 0) 就是对 第一列进行控制。
其他列默认不可修改。
Object[][] cells = { {Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE,
"可选",
"", ""}, {Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE,
"可选", "", ""}, {Boolean.FALSE, "必选", "", ""},
{Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE, "必选", "",
""}, {Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE, "必选",
"", ""}, {Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE,
"必选", "", ""}, {Boolean.FALSE, "必选", "", ""}, {Boolean.FALSE, "必选", "",
""}, {Boolean.FALSE, "可选", "", ""}, {Boolean.FALSE, "可选", "", ""}, };
String[] columnNames = { "选择", "重要级", "文件名", "说明", "" ,""}; // 获得升级MOdule并添加到JTable
// Object[][] getSetModule=objgetResponse.getModule();
// String[]
// moduleName={"ID","name","seleect","depend","release","note"};
DefaultTableModel model = new DefaultTableModel(cells, columnNames) { public boolean isCellEditable(int row, int column)
{
TableModel model = jTable1.getModel(); if (column == 0)
{
String checked = (String) model.getValueAt(row, column + 1);
if (checked.equals("必选"))
{
return false;
}
return true;
}
return false;
}
public Class getColumnClass(int columnIndex) {
return columnIndex == 0 ? Boolean.class : String.class;
}
};
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
int mode = 0;
}
}; jTable1 = new JTable(model); /**
* 获得用户选择项目
*/
jTable1.getModel().addTableModelListener(new TableModelListener() {
public void tableChanged(TableModelEvent e) {
String getModule = "";
String getValue = ""; TableModel model = jTable1.getModel();
int count = model.getRowCount();
for (int i = 0; i < count; i++) {
Boolean checked = (Boolean) model.getValueAt(i, 0);
if (checked.equals(Boolean.TRUE)) {
getModule = getModule + "" + String.valueOf(i) + ",";
getValue = getValue + ""
+ (String) model.getValueAt(i, 1) + ",";
}
}
getAllModule = getValue;
System.out.println(""+getValue); }
});
我的表格样式是这样的···
都是Boolean类型的···
我想当选择了其中一个的时候···其余的都不可以在编辑了··
请问应该怎么实现啊···
都差不多的吧。
无非就是在方法里对着 row 和 col 进行分析啊。
你的代码到处是中文,
也没编辑,看得我眼花缭乱