请教各位大侠,如何根据JTabel 的内容来决定他的列是否可编辑? 新建一个JTable,在录入数据以后,如果第二列的数据和第一列相同,则第二列不可编辑,否则都可以编辑,请问有肯能实现吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 an example:package swing;import java.awt.BorderLayout;import java.awt.Dimension;import javax.swing.JFrame;import javax.swing.JTable;import javax.swing.table.DefaultTableModel;public class MyTable extends JFrame{ public MyTable() { this.setLayout(new BorderLayout()); this.setSize(new Dimension(400,300)); final String[][] data = new String[][]{ {"1","1"}, {"2","4"}, {"3","3"}, {"4","5"}, }; String[] columnNames = new String[]{"C1","C2"}; DefaultTableModel model = new DefaultTableModel(data,columnNames){ @Override public boolean isCellEditable(int row, int column) { return !(column==1 && data[row][0].equals(data[row][1])); } }; JTable table = new JTable(); table.setModel(model); this.add(table, BorderLayout.NORTH); this.setVisible(true); } public static void main(String[] args){ MyTable mt = new MyTable(); }} import java.awt.*;import java.awt.event.*;import java.util.Vector;import javax.swing.*;import javax.swing.table.DefaultTableModel;public class TestTable extends JFrame { JTable tb = new JTable(); JPanel p = new JPanel(); Vector columnNames = new Vector(); Vector rowData = new Vector(); MyTableModel_Mold_BOM tablemodel; boolean []; public TestTable() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocation(112, 0); setSize(700, 420); columnNames.add("檔案號"); columnNames.add("姓名"); columnNames.add("年齡"); columnNames.add("性別"); columnNames.add("婚姻狀況"); columnNames.add("職業"); columnNames.add("聯系電話"); Vector row1 = new Vector(); row1.add("010110"); row1.add("張三"); row1.add("28"); row1.add("男"); row1.add("已婚"); row1.add("教師"); row1.add("13686562936"); rowData.add(row1); Vector row2 = new Vector(); row2.add("010110"); row2.add("李四"); row2.add("28"); row2.add("男"); row2.add("已婚"); row2.add("教師"); row2.add("13686562936"); rowData.add(row2); Vector row3 = new Vector(); row3.add("010110"); row3.add("張三"); row3.add("28"); row3.add("男"); row3.add("已婚"); row3.add("sdfsdf"); row3.add("13686562936"); rowData.add(row3); tablemodel = new MyTableModel_Mold_BOM(rowData, columnNames); tb = new JTable(tablemodel); = new boolean[rowData.size()]; for (int i=0 ; i<.length ; i++){ [i] = false; } tb.setPreferredScrollableViewportSize(new Dimension(639, 232)); tb.setRowHeight(20); tb.setRowSelectionAllowed(true); tb.setSelectionBackground(Color.lightGray); tb.setSelectionForeground(Color.white); tb.setGridColor(Color.black); tb.setShowGrid(true); tb.setShowHorizontalLines(true); tb.setShowVerticalLines(true); tb.setBackground(Color.white); JScrollPane pane = new JScrollPane(tb); pane.setBackground(Color.white); p.add(pane); add(p); setVisible(true); } class MyTableModel_Mold_BOM extends DefaultTableModel{ public MyTableModel_Mold_BOM(Vector data,Vector columns){ super(data,columns); } public void flag_(){ for (int i=0 ; i<rowData.size() ; i++){ Vector vec = (Vector) rowData.get(i); if (vec.get(1).toString().equals("張三")){ [i] = true; } } } public boolean isCellEditable(int row,int column){ if (column == 3){ flag_(); return [row];} return false; } public Class<?> getColumnClass(int columnIndex) { return Object.class; } } public static void main(String args[]) { new TestTable(); }}你看看這個代碼 如果是張三 那么年齡可編輯 類似的~~~ 1,为你的jtable设置监听 jTable1.addKeyListener(new java.awt.event.KeyAdapter() { public void keyPressed(KeyEvent e) { jTable1_keyPressed(e);//处理方法 } }); 2,实现处理方法. void jTable1_keyPressed(KeyEvent e){ JTable jtab1 = (JTable) e.getSource(); int key = e.getKeyCode(); int c = jtab1.getSelectedColumn();//获取修改列 int r = jtab1.getSelectedRow();//获取修改行 String sdb = "";//这个值是从数据库获取过来的. String stable = (String) jtab1.getValueAt(r,jTable1.convertColumnIndexToView("这里是你的表中修改列的列名")) boolean change = sdb != stable; if(change){ //第二列不可编辑 ...... } } 可以啊~ 加監聽~~ 用setValueAt~~ 可以给个例子吗?我用的 defaultTableModel.addTableModelListener(new TableModelListener() { public void tableChanged(TableModelEvent e) { //事件 } });但是没办法实现 import java.awt.Color;import java.awt.Dimension;import java.util.Vector;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTable;import javax.swing.event.TableModelEvent;import javax.swing.event.TableModelListener;import javax.swing.table.DefaultTableModel;public class TestTable extends JFrame { JTable tb = new JTable(); JPanel p = new JPanel(); Vector columnNames = new Vector(); Vector rowData = new Vector(); MyTableModel_Mold_BOM tablemodel; boolean []; public TestTable() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocation(112, 0); setSize(700, 420); columnNames.add("檔案號"); columnNames.add("姓名"); columnNames.add("年齡"); columnNames.add("性別"); columnNames.add("婚姻狀況"); columnNames.add("職業"); columnNames.add("聯系電話"); Vector row1 = new Vector(); row1.add("010110"); row1.add("張三"); row1.add("28"); row1.add("男"); row1.add("已婚"); row1.add("教師"); row1.add("13686562936"); rowData.add(row1); Vector row2 = new Vector(); row2.add("010110"); row2.add("李四"); row2.add("28"); row2.add("男"); row2.add("已婚"); row2.add("教師"); row2.add("13686562936"); rowData.add(row2); Vector row3 = new Vector(); row3.add("010110"); row3.add("張三"); row3.add("28"); row3.add("男"); row3.add("已婚"); row3.add("sdfsdf"); row3.add("13686562936"); rowData.add(row3); tablemodel = new MyTableModel_Mold_BOM(rowData, columnNames); tb = new JTable(tablemodel); = new boolean[rowData.size()]; for (int i=0 ; i<.length ; i++){ [i] = false; } tablemodel.addTableModelListener(new TableModelListener(){ public void tableChanged(TableModelEvent e) { Vector vec_row = (Vector) rowData.get(e.getLastRow()); String str = vec_row.get(e.getColumn()).toString(); ((Vector)rowData.get(e.getLastRow())).set(e.getColumn()+1,str); } }); tb.setPreferredScrollableViewportSize(new Dimension(639, 232)); tb.setRowHeight(20); tb.setRowSelectionAllowed(true); tb.setSelectionBackground(Color.lightGray); tb.setSelectionForeground(Color.white); tb.setGridColor(Color.black); tb.setShowGrid(true); tb.setShowHorizontalLines(true); tb.setShowVerticalLines(true); tb.setBackground(Color.white); JScrollPane pane = new JScrollPane(tb); pane.setBackground(Color.white); p.add(pane); add(p); setVisible(true); } class MyTableModel_Mold_BOM extends DefaultTableModel{ public MyTableModel_Mold_BOM(Vector data,Vector columns){ super(data,columns); } public void flag_(){ for (int i=0 ; i<rowData.size() ; i++){ Vector vec = (Vector) rowData.get(i); if (vec.get(1).toString().equals("張三")){ [i] = true; } } } public boolean isCellEditable(int row,int column){ if (column == 3){ flag_(); return [row];} return false; } public Class<?> getColumnClass(int columnIndex) { return Object.class; } } public static void main(String args[]) { new TestTable(); }}還是上面的那個例子 你看看能參考下不 改變張三的性別 鼠標點出去一下 后一列的數值也變化了 horizonlyhw 兄,用你的例子运行了下,发现没你说的效果呢?改变“张三”的性别并不会引起其他某列的变化,怎么回事? java中使用报表的调查 谁能给我个javamail imap协议的访问多个文件夹的例子? java压缩/解压缩,出现CRC失败,文件被损坏,怎回事? 关于数组的 急~~,找不到servlet包问题!! 字符串根据(,)分割。放到数组里面。 对象序列化的问题 这次csdn故障修复后感觉我的专家分、可用分和一些已发的帖子都产生了变化。 在windows中怎样关闭某个端口,不是编程,只是操作 drawLine画虚线? 高分请教面试问题......... 很期待 多网卡 多ip 如何获取 .?? 高手赐教
package swing;
import java.awt.BorderLayout;
import java.awt.Dimension;import javax.swing.JFrame;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;public class MyTable extends JFrame{
public MyTable() {
this.setLayout(new BorderLayout());
this.setSize(new Dimension(400,300));
final String[][] data = new String[][]{
{"1","1"},
{"2","4"},
{"3","3"},
{"4","5"},
};
String[] columnNames = new String[]{"C1","C2"};
DefaultTableModel model = new DefaultTableModel(data,columnNames){
@Override
public boolean isCellEditable(int row, int column) {
return !(column==1 && data[row][0].equals(data[row][1]));
}
};
JTable table = new JTable();
table.setModel(model);
this.add(table, BorderLayout.NORTH);
this.setVisible(true);
}
public static void main(String[] args){
MyTable mt = new MyTable();
}}
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;import javax.swing.*;
import javax.swing.table.DefaultTableModel;public class TestTable extends JFrame {
JTable tb = new JTable();
JPanel p = new JPanel();
Vector columnNames = new Vector();
Vector rowData = new Vector();
MyTableModel_Mold_BOM tablemodel;
boolean [];
public TestTable() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(112, 0);
setSize(700, 420);
columnNames.add("檔案號");
columnNames.add("姓名");
columnNames.add("年齡");
columnNames.add("性別");
columnNames.add("婚姻狀況");
columnNames.add("職業");
columnNames.add("聯系電話");
Vector row1 = new Vector();
row1.add("010110");
row1.add("張三");
row1.add("28");
row1.add("男");
row1.add("已婚");
row1.add("教師");
row1.add("13686562936");
rowData.add(row1); Vector row2 = new Vector();
row2.add("010110");
row2.add("李四");
row2.add("28");
row2.add("男");
row2.add("已婚");
row2.add("教師");
row2.add("13686562936");
rowData.add(row2);
Vector row3 = new Vector();
row3.add("010110");
row3.add("張三");
row3.add("28");
row3.add("男");
row3.add("已婚");
row3.add("sdfsdf");
row3.add("13686562936");
rowData.add(row3);
tablemodel = new MyTableModel_Mold_BOM(rowData, columnNames);
tb = new JTable(tablemodel);
= new boolean[rowData.size()];
for (int i=0 ; i<.length ; i++){
[i] = false;
}
tb.setPreferredScrollableViewportSize(new Dimension(639, 232));
tb.setRowHeight(20);
tb.setRowSelectionAllowed(true);
tb.setSelectionBackground(Color.lightGray);
tb.setSelectionForeground(Color.white);
tb.setGridColor(Color.black);
tb.setShowGrid(true);
tb.setShowHorizontalLines(true);
tb.setShowVerticalLines(true);
tb.setBackground(Color.white);
JScrollPane pane = new JScrollPane(tb);
pane.setBackground(Color.white);
p.add(pane);
add(p);
setVisible(true);
}
class MyTableModel_Mold_BOM extends DefaultTableModel{
public MyTableModel_Mold_BOM(Vector data,Vector columns){
super(data,columns);
}
public void flag_(){
for (int i=0 ; i<rowData.size() ; i++){
Vector vec = (Vector) rowData.get(i);
if (vec.get(1).toString().equals("張三")){
[i] = true;
}
}
}
public boolean isCellEditable(int row,int column){
if (column == 3){
flag_();
return [row];}
return false;
}
public Class<?> getColumnClass(int columnIndex) { return Object.class;
}
}
public static void main(String args[]) {
new TestTable();
}
}你看看這個代碼 如果是張三 那么年齡可編輯 類似的~~~
jTable1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyPressed(KeyEvent e) {
jTable1_keyPressed(e);//处理方法
}
});
2,实现处理方法.
void jTable1_keyPressed(KeyEvent e){
JTable jtab1 = (JTable) e.getSource();
int key = e.getKeyCode();
int c = jtab1.getSelectedColumn();//获取修改列
int r = jtab1.getSelectedRow();//获取修改行
String sdb = "";//这个值是从数据库获取过来的.
String stable = (String) jtab1.getValueAt(r,jTable1.convertColumnIndexToView("这里是你的表中修改列的列名"))
boolean change = sdb != stable;
if(change){
//第二列不可编辑
......
}
}
public void tableChanged(TableModelEvent e) {
//事件
}
});
但是没办法实现
import java.awt.Color;
import java.awt.Dimension;
import java.util.Vector;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;public class TestTable extends JFrame {
JTable tb = new JTable();
JPanel p = new JPanel();
Vector columnNames = new Vector();
Vector rowData = new Vector();
MyTableModel_Mold_BOM tablemodel;
boolean [];
public TestTable() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(112, 0);
setSize(700, 420);
columnNames.add("檔案號");
columnNames.add("姓名");
columnNames.add("年齡");
columnNames.add("性別");
columnNames.add("婚姻狀況");
columnNames.add("職業");
columnNames.add("聯系電話");
Vector row1 = new Vector();
row1.add("010110");
row1.add("張三");
row1.add("28");
row1.add("男");
row1.add("已婚");
row1.add("教師");
row1.add("13686562936");
rowData.add(row1); Vector row2 = new Vector();
row2.add("010110");
row2.add("李四");
row2.add("28");
row2.add("男");
row2.add("已婚");
row2.add("教師");
row2.add("13686562936");
rowData.add(row2);
Vector row3 = new Vector();
row3.add("010110");
row3.add("張三");
row3.add("28");
row3.add("男");
row3.add("已婚");
row3.add("sdfsdf");
row3.add("13686562936");
rowData.add(row3);
tablemodel = new MyTableModel_Mold_BOM(rowData, columnNames);
tb = new JTable(tablemodel);
= new boolean[rowData.size()];
for (int i=0 ; i<.length ; i++){
[i] = false;
}
tablemodel.addTableModelListener(new TableModelListener(){ public void tableChanged(TableModelEvent e) {
Vector vec_row = (Vector) rowData.get(e.getLastRow());
String str = vec_row.get(e.getColumn()).toString();
((Vector)rowData.get(e.getLastRow())).set(e.getColumn()+1,str);
}
});
tb.setPreferredScrollableViewportSize(new Dimension(639, 232));
tb.setRowHeight(20);
tb.setRowSelectionAllowed(true);
tb.setSelectionBackground(Color.lightGray);
tb.setSelectionForeground(Color.white);
tb.setGridColor(Color.black);
tb.setShowGrid(true);
tb.setShowHorizontalLines(true);
tb.setShowVerticalLines(true);
tb.setBackground(Color.white);
JScrollPane pane = new JScrollPane(tb);
pane.setBackground(Color.white);
p.add(pane);
add(p);
setVisible(true);
}
class MyTableModel_Mold_BOM extends DefaultTableModel{
public MyTableModel_Mold_BOM(Vector data,Vector columns){
super(data,columns);
}
public void flag_(){
for (int i=0 ; i<rowData.size() ; i++){
Vector vec = (Vector) rowData.get(i);
if (vec.get(1).toString().equals("張三")){
[i] = true;
}
}
}
public boolean isCellEditable(int row,int column){
if (column == 3){
flag_();
return [row];}
return false;
}
public Class<?> getColumnClass(int columnIndex) { return Object.class;
}
}
public static void main(String args[]) {
new TestTable();
}
}還是上面的那個例子 你看看能參考下不 改變張三的性別 鼠標點出去一下 后一列的數值也變化了