Jtable Jcheckbox 想做成前面一个checkbox,后面跟着一条记录,选中checkbox,也就选中该条,象sina邮箱,用Applet! 用Applet!这个这个我是不会,有达人会吗?把swing组件放到awt上,谁来搞定?如果是JApplet,那么把JCheckBox作为表格第0列的Renderer和Editor就可以了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 写错了,是JApplet,和JCheckBox和JTable的组合.谢谢了.有例子吗? jtable.getSelectionModel().addSelectionInterval();jtable.getSelectionModel().setSelectionInterval();看看这俩个方法 jtable.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);这个可以实现按住Ctrl不连续的选多行 package zzg.test;import java.awt.*;import java.awt.event.*;import java.util.*;import java.io.*;import javax.swing.*;import javax.swing.border.*;import javax.swing.event.*;import javax.swing.table.*;import authority.model.TXIManageUserWarehouse;class a implements TableModelListener{ public void tableChanged(TableModelEvent tableModelEvent) { System.out.print("1"); }}public class JTest extends JFrame{ protected JTable m_table; protected TableData m_data; protected TXIManageUserWarehouse manageUserWarehouse=new TXIManageUserWarehouse(true); public JTest() { super("Expense Report"); setSize(200, 200); m_data = new TableData(manageUserWarehouse); //m_data.addTableModelListener(new a()); m_table = new JTable(); m_table.setAutoCreateColumnsFromModel(false); m_table.setModel(m_data); m_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); //第一列的属性 TableCellRenderer renderer = new CheckCellRenderer(); TableCellEditor editor = new ChangeButtonEditor(new JCheckBox(),m_table,manageUserWarehouse,m_data); /** TableCellEditor editor = new DefaultCellEditor(new JCheckBox(){ public void actionPerformed(ActionEvent e) { System.out.print("zzz"); } } ); */ TableColumn column = new TableColumn(0,30,renderer, editor); m_table.addColumn(column); //第二列的属性 renderer = new DefaultTableCellRenderer(); editor = new DefaultCellEditor(new JTextField()); column = new TableColumn(1,180,renderer, editor); m_table.addColumn(column); m_table.getSelectionModel().addSelectionInterval(ListSelectionModel.SINGLE_SELECTION,ListSelectionModel.SINGLE_SELECTION);; m_table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JTableHeader header = m_table.getTableHeader(); header.setUpdateTableInRealTime(false); JScrollPane ps = new JScrollPane(); ps.setSize(220, 220); ps.getViewport().add(m_table); getContentPane().add(ps, BorderLayout.CENTER); WindowListener wndCloser = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; addWindowListener(wndCloser); setVisible(true); } public static void main(String argv[]) { new JTest(); }}class CheckCellRenderer extends JCheckBox implements TableCellRenderer{ protected static Border m_noFocusBorder; public CheckCellRenderer() { super(); m_noFocusBorder = new EmptyBorder(1, 2, 1, 2); setOpaque(true); setBorder(m_noFocusBorder); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value instanceof Boolean) { Boolean b = (Boolean)value; setSelected(b.booleanValue()); } setBackground(isSelected && !hasFocus ? table.getSelectionBackground() : table.getBackground()); setForeground(isSelected && !hasFocus ? table.getSelectionForeground() : table.getForeground()); setFont(table.getFont()); setBorder(hasFocus ? UIManager.getBorder( "Table.focusCellHighlightBorder") : m_noFocusBorder); return this; } }class TableData extends AbstractTableModel{ protected Vector m_vector; protected Vector temp_vector; protected TXIManageUserWarehouse manageUserWarehouse; public TableData(TXIManageUserWarehouse manageUserWarehouse) { this.manageUserWarehouse=manageUserWarehouse; m_vector = new Vector(); setDefaultData(); } public void setDefaultData() { m_vector.removeAllElements(); temp_vector=manageUserWarehouse.getWarehousegroup(); for(int i=0;i<temp_vector.size();i++) { Vector v=new Vector(); String originPower=""; int temp=((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(i)).getOriginpower(); String warehouseName=((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(i)).getWarehousename(); if(0==temp) originPower="true"; else if(1==temp) originPower="false"; v.add(Boolean.valueOf(originPower)); v.add(warehouseName); m_vector.addElement(v); } } public int getRowCount() { return m_vector==null ? 0 : m_vector.size(); } public int getColumnCount() { return 2; } public String getColumnName(int column) { if(column==0) return "选择"; else return "仓库名"; } public boolean isCellEditable(int nRow, int nCol) { if(0==nCol) return true; else return false; } public Object getValueAt(int nRow, int nCol) { Vector record=(Vector)m_vector.elementAt(nRow); return record.elementAt(nCol); } public void setValueAt(Object value, int nRow, int nCol) { Vector record=(Vector)m_vector.elementAt(nRow); record.setElementAt(value,nCol); //fireTableCellUpdated(nRow,nCol); } public void insert(int row) { if (row < 0) row = 0; if (row > m_vector.size()) row = m_vector.size(); Vector v=new Vector(); v.addElement(new Boolean(false)); v.addElement(new String("")); m_vector.insertElementAt(v,row); } public boolean delete(int row) { if (row < 0 || row >= m_vector.size()) return false; m_vector.remove(row); return true; }}class ChangeButtonEditor extends DefaultCellEditor { private int hererow; private JCheckBox m_checkBox; private int targetPower;//中间变量 private TXIManageUserWarehouse manageUserWarehouse; int index;//点击的位置 public ChangeButtonEditor(JCheckBox checkBox,final JTable m_table,final TXIManageUserWarehouse manageUserWarehouse,final TableData m_data) { super(checkBox); m_checkBox=checkBox; this.manageUserWarehouse=manageUserWarehouse; m_checkBox.setOpaque(false); m_checkBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { //dataModel.setValueAt((Integer.parseInt(dataModel.getValueAt(hererow,3).toString()) +1)%3+"",hererow,3); //button.setText(dataModel.getValueAt(hererow,3).toString()); index = m_table.getSelectedRow(); Vector temp_vector=manageUserWarehouse.getWarehousegroup(); int targetPower=((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(index)).getTargetpower(); if(0==targetPower) { targetPower=1; } else if(1==targetPower) { targetPower = 0; } ((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(index)).setTargetpower(targetPower); if(1==targetPower) m_data.setValueAt(Boolean.TRUE,index,0); else if(0==targetPower) m_data.setValueAt(Boolean.FALSE,index,0); m_table.setModel(m_data); //m_data.setValueAt(Integer.valueOf(String.valueOf(targetPower)),index,0); System.out.println("==========="+String.valueOf(targetPower)+"============="); System.out.println("-------"+String.valueOf(index)+"--------"); } }); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { hererow=row; /** Component component = getComponent(); if (component instanceof JCheckBox){ m_checkBox = (JCheckBox)component; table.setValueAt(Boolean.valueOf(String.valueOf(m_checkBox.isSelected())),row,column); return m_checkBox; } else return component; */ return m_checkBox; } public Object getCellEditorValue() { return null ; } public boolean stopCellEditing() { return super.stopCellEditing(); //return true; } protected void fireEditingStopped() { //super.fireEditingStopped(); }} package com.xicrm.authority.model;import java.util.Vector;import java.util.Hashtable;/** * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2003</p> * <p>Company: </p> * @author not attributable * @version 1.0 */public class TXIManageUserWarehouse { String resource = null; String user=null; //仓库id,仓库名称,初值,终值,放在hashtable中,再把hashtable放在vector中 Vector warehousegroup = new Vector(); warehouseProperty wp=new warehouseProperty(); String bizObjectPN = null; String deptTableName = null; String deptAuthoTableName = null; String backPN = null; String bizFieldPN1 = null; String bizFieldPN2 = null; String bizFieldPN3 = null; String bizFieldPN4 = null; public class warehouseProperty { int warehouseId=0; String warehouseName=""; int originPower=0; int targetPower=0; warehouseProperty(){} public void setWarehouseId(int warehouseId) { this.warehouseId = warehouseId; } public int getWarehouseId() { return warehouseId; } public void setWarehousename(String warehouseName) { this.warehouseName = warehouseName; } public String getWarehousename() { return warehouseName; } public void setOriginpower(int originPower) { this.originPower = originPower; } public int getOriginpower() { return originPower; } public void setTargetpower(int targetPower) { this.targetPower = targetPower; } public int getTargetpower() { return targetPower; } } //Hashtable Power=new Hashtable(); //int originPower;//从用户权限表中赋值,固定值=0;从权限列表中赋值,固定值=1 //int targetPower;//从权限表中赋值,初值=0,在界面中改变=1 public TXIManageUserWarehouse() { } //用户的权限存在一张表中,权限列表在一张表中,是两张表. public TXIManageUserWarehouse(boolean flag) { warehouseProperty wp=new warehouseProperty(); wp.setWarehouseId(0); wp.setWarehousename("仓库0"); wp.setOriginpower(0); wp.setTargetpower(0); warehousegroup.add(wp); wp=new warehouseProperty(); wp.setWarehouseId(1); wp.setWarehousename("仓库1"); wp.setOriginpower(0); wp.setTargetpower(0); warehousegroup.add(wp); wp=new warehouseProperty(); wp.setWarehouseId(2); wp.setWarehousename("仓库2"); wp.setOriginpower(0); wp.setTargetpower(0); warehousegroup.add(wp); wp=new warehouseProperty(); wp.setWarehouseId(3); wp.setWarehousename("仓库3"); wp.setOriginpower(1); wp.setTargetpower(0); warehousegroup.add(wp); wp=new warehouseProperty(); wp.setWarehouseId(4); wp.setWarehousename("仓库4"); wp.setOriginpower(1); wp.setTargetpower(0); warehousegroup.add(wp); //wp=null; /** Hashtable tempHt=new Hashtable(); tempHt.put("warehouseid",Integer.valueOf("0")); tempHt.put("warehousename",(String)"仓库0"); tempHt.put("originPower",Integer.valueOf("0")); tempHt.put("targetPower",Integer.valueOf("0")); warehousegroup.add(tempHt); tempHt=null; tempHt.put("warehouseid",Integer.valueOf("1")); tempHt.put("warehousename",(String)"仓库1"); tempHt.put("originPower",Integer.valueOf("0")); tempHt.put("targetPower",Integer.valueOf("0")); warehousegroup.add(tempHt); tempHt=null; tempHt.put("warehouseid",Integer.valueOf("2")); tempHt.put("warehousename",(String)"仓库2"); tempHt.put("originPower",Integer.valueOf("0")); tempHt.put("targetPower",Integer.valueOf("0")); warehousegroup.add(tempHt); tempHt=null; tempHt.put("warehouseid",Integer.valueOf("3")); tempHt.put("warehousename",(String)"仓库3"); tempHt.put("originPower",Integer.valueOf("1")); tempHt.put("targetPower",Integer.valueOf("0")); warehousegroup.add(tempHt); tempHt=null; tempHt.put("warehouseid",Integer.valueOf("4")); tempHt.put("warehousename",(String)"仓库4"); tempHt.put("originPower",Integer.valueOf("1")); tempHt.put("targetPower",Integer.valueOf("0")); warehousegroup.add(tempHt); tempHt=null; /** //从用户权限表中得到的值 if(flag) { originPower=0; targetPower=0; } //从权限列表中得到的值 else { originPower=1; targetPower=0; } */ } /* public void setOriginPower(int originPower) { this.originPower=originPower; } public int getOriginPower() { return this.originPower; } public void setTargetPower(int targetPower) { this.targetPower=targetPower; } public int getTargetPower() { return this.targetPower; } */ public void setWarehousegroup(Vector warehousegroup) { this.warehousegroup = warehousegroup; } public Vector getWarehousegroup() { return warehousegroup==null?null:warehousegroup; } public void setResource(String resource) { this.resource = resource; } public String getResource() { return resource==null?"":resource; } public void setUser(String user) { this.user = user; } public String getUser() { return user==null?"":user; } 有几个方法,放不上取了,您就把那几个属性上了吧.就一个是有用的.大哥您给看看吧.我的这checkbox,显示的不正确呀.点击后显示就乱了. import authority.model.TXIManageUserWarehouse没有这个包,实在是帮不了你了 看了你的代码,郁闷的不行自做主张改了点东西如下:1、ChangeButtonEditor类改成CheckBoxCellEditorclass CheckBoxCellEditor extends DefaultCellEditor { private static JCheckBox m_checkBox = new JCheckBox(); public CheckBoxCellEditor() { super(m_checkBox); m_checkBox.setOpaque(false); m_checkBox.setHorizontalAlignment(JLabel.CENTER); } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if (value instanceof Boolean) { Boolean b = (Boolean) value; m_checkBox.setSelected(b.booleanValue()); } m_checkBox.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground()); m_checkBox.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground()); /** * Component component = getComponent(); if (component instanceof JCheckBox){ m_checkBox = (JCheckBox)component; * * * table.setValueAt(Boolean.valueOf(String.valueOf(m_checkBox.isSelected())),row,column); return m_checkBox; } else return component; */ return m_checkBox; } public Object getCellEditorValue() { return new Boolean(m_checkBox.isSelected()); }}2、CheckCellRenderer改成CheckBoxCellRendererclass CheckBoxCellRenderer extends JCheckBox implements TableCellRenderer { protected static Border m_noFocusBorder; public CheckBoxCellRenderer() { super(); m_noFocusBorder = new EmptyBorder(1, 2, 1, 2); setHorizontalAlignment(JLabel.CENTER); setOpaque(true); setBorder(m_noFocusBorder); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { if (value instanceof Boolean) { Boolean b = (Boolean) value; setSelected(b.booleanValue()); } setBackground(isSelected ? table.getSelectionBackground() : table.getBackground()); setForeground(isSelected ? table.getSelectionForeground() : table.getForeground()); setFont(table.getFont()); setBorder(hasFocus ? UIManager.getBorder("Table.focusCellHighlightBorder") : m_noFocusBorder); return this; }}看看是不是你要的?另:CheckBox在Table里一般使用中间对齐方式,这是一个使用习惯,当然你一定要左对齐也没问题 大哥,还有一点小问题.程序开始时,默认的几个checkbox是选中的,在点击它们后,又会出现一个把另一个给修改的问题,请您再看一下.谢谢.您也可以说一下,这是为什么会出现一个把另一个修改的现象呢. 改完应该不会有这个bug,出现这个bug是你自己写的那个CellEditor有问题,处理方式有错 TableCellRenderer renderer = new CheckCellRenderer(); TableCellEditor editor = new ChangeButtonEditor(new JCheckBox(),m_table,manageUserWarehouse,m_data);这两句你改了吗?应该改成TableCellRenderer renderer = new CheckBoxCellRenderer();TableCellEditor editor = new CheckBoxCellEditor(); 采用m_checkBox.addActionListener方式的话,因为事件响应的不确定性,所以你无法判断Table的换行和JCheckBox的Action哪个先被调用,如果JCheckBox的Action先被调用,显然这时候table.getSelectedRow();取到的并不是你正在修改的当前行,所以,你把上次选中行的数据也改变了。 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { //关键位置,要加入这一段,就可以修改点一个checkbox同时也改另一个的bug. if (value instanceof Boolean) { Boolean b = (Boolean) value; m_checkBox.setSelected(b.booleanValue()); } m_checkBox.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground()); m_checkBox.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground()); return m_checkBox; }您让改了这一段以后就好了.这个就能解决您上面所说的问题吗? 会不会是换行时 没有结束编辑器的关系是的话可以在选择时间中调用checkbox的stopCellEditing方法 其实你的值的改变根本不用你自己管,Table本身有完善的机制来处理它,上面那行代码解决的是显示问题,跟你的问题没关系 if (value instanceof Boolean) { Boolean b = (Boolean) value; m_checkBox.setSelected(b.booleanValue()); }把编辑器的显示值设为你数据里面的值 删掉的这段是你出错的地方 m_checkBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent event) { //dataModel.setValueAt((Integer.parseInt(dataModel.getValueAt(hererow,3).toString()) +1)%3+"",hererow,3); //button.setText(dataModel.getValueAt(hererow,3).toString()); index = m_table.getSelectedRow(); Vector temp_vector=manageUserWarehouse.getWarehousegroup(); int targetPower=((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(index)).getTargetpower(); if(0==targetPower) { targetPower=1; } else if(1==targetPower) { targetPower = 0; } ((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(index)).setTargetpower(targetPower); if(1==targetPower) m_data.setValueAt(Boolean.TRUE,index,0); else if(0==targetPower) m_data.setValueAt(Boolean.FALSE,index,0); m_table.setModel(m_data); //m_data.setValueAt(Integer.valueOf(String.valueOf(targetPower)),index,0); System.out.println("==========="+String.valueOf(targetPower)+"============="); System.out.println("-------"+String.valueOf(index)+"--------"); } }); 关于java泛型的问题T 如何判断对话框中输入的数据,直到得到我们所预期的数据 一个简单的replaceAll方法为何出PatternSyntaxException 实时聊天程序外风实现???? 计算器例子 出错 Java初学者CSDN第2问! 请教高手,很急.............. 高分!请给一个在jbuilder7里面做Struts开发的简单例子! 请问这个方法如何调用? 如何用JAVA生成一个简单的word文档!!!! 为什么跳不出这个循环?(网络编程) 关于classloader的一个问题?如何在动态加载的类中引用资源类???
jtable.getSelectionModel().setSelectionInterval();
看看这俩个方法
这个可以实现按住Ctrl不连续的选多行
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;import javax.swing.*;
import javax.swing.border.*;
import javax.swing.event.*;
import javax.swing.table.*;
import authority.model.TXIManageUserWarehouse;
class a implements TableModelListener
{
public void tableChanged(TableModelEvent tableModelEvent)
{
System.out.print("1");
}
}public class JTest extends JFrame
{
protected JTable m_table;
protected TableData m_data;
protected TXIManageUserWarehouse manageUserWarehouse=new TXIManageUserWarehouse(true);
public JTest() {
super("Expense Report");
setSize(200, 200);
m_data = new TableData(manageUserWarehouse);
//m_data.addTableModelListener(new a());
m_table = new JTable();
m_table.setAutoCreateColumnsFromModel(false);
m_table.setModel(m_data);
m_table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//第一列的属性
TableCellRenderer renderer = new CheckCellRenderer();
TableCellEditor editor = new ChangeButtonEditor(new JCheckBox(),m_table,manageUserWarehouse,m_data);
/**
TableCellEditor editor = new DefaultCellEditor(new JCheckBox(){
public void actionPerformed(ActionEvent e)
{
System.out.print("zzz");
}
}
);
*/
TableColumn column = new TableColumn(0,30,renderer, editor);
m_table.addColumn(column);
//第二列的属性
renderer = new DefaultTableCellRenderer();
editor = new DefaultCellEditor(new JTextField());
column = new TableColumn(1,180,renderer, editor);
m_table.addColumn(column);
m_table.getSelectionModel().addSelectionInterval(ListSelectionModel.SINGLE_SELECTION,ListSelectionModel.SINGLE_SELECTION);;
m_table.getSelectionModel().setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); JTableHeader header = m_table.getTableHeader();
header.setUpdateTableInRealTime(false); JScrollPane ps = new JScrollPane();
ps.setSize(220, 220);
ps.getViewport().add(m_table);
getContentPane().add(ps, BorderLayout.CENTER); WindowListener wndCloser = new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(wndCloser); setVisible(true);
}
public static void main(String argv[]) {
new JTest();
}
}class CheckCellRenderer extends JCheckBox implements TableCellRenderer
{
protected static Border m_noFocusBorder;
public CheckCellRenderer() {
super();
m_noFocusBorder = new EmptyBorder(1, 2, 1, 2);
setOpaque(true);
setBorder(m_noFocusBorder);
}
Object value, boolean isSelected, boolean hasFocus,
int row, int column)
{
if (value instanceof Boolean) {
Boolean b = (Boolean)value;
setSelected(b.booleanValue());
} setBackground(isSelected && !hasFocus ?
table.getSelectionBackground() : table.getBackground());
setForeground(isSelected && !hasFocus ?
table.getSelectionForeground() : table.getForeground()); setFont(table.getFont());
setBorder(hasFocus ? UIManager.getBorder(
"Table.focusCellHighlightBorder") : m_noFocusBorder); return this;
}
}class TableData extends AbstractTableModel
{
protected Vector m_vector;
protected Vector temp_vector;
protected TXIManageUserWarehouse manageUserWarehouse;
public TableData(TXIManageUserWarehouse manageUserWarehouse) {
this.manageUserWarehouse=manageUserWarehouse;
m_vector = new Vector();
setDefaultData();
} public void setDefaultData() {
m_vector.removeAllElements();
temp_vector=manageUserWarehouse.getWarehousegroup();
for(int i=0;i<temp_vector.size();i++)
{
Vector v=new Vector();
String originPower="";
int temp=((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(i)).getOriginpower();
String warehouseName=((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(i)).getWarehousename();
if(0==temp)
originPower="true";
else if(1==temp)
originPower="false";
v.add(Boolean.valueOf(originPower));
v.add(warehouseName);
m_vector.addElement(v);
}
} public int getRowCount() {
return m_vector==null ? 0 : m_vector.size();
} public int getColumnCount() {
return 2;
} public String getColumnName(int column) {
if(column==0)
return "选择";
else
return "仓库名";
} public boolean isCellEditable(int nRow, int nCol) {
if(0==nCol)
return true;
else
return false;
} public Object getValueAt(int nRow, int nCol) {
Vector record=(Vector)m_vector.elementAt(nRow);
return record.elementAt(nCol);
} public void setValueAt(Object value, int nRow, int nCol) {
Vector record=(Vector)m_vector.elementAt(nRow);
record.setElementAt(value,nCol);
//fireTableCellUpdated(nRow,nCol);
} public void insert(int row) {
if (row < 0)
row = 0;
if (row > m_vector.size())
row = m_vector.size();
Vector v=new Vector();
v.addElement(new Boolean(false));
v.addElement(new String(""));
m_vector.insertElementAt(v,row);
} public boolean delete(int row) {
if (row < 0 || row >= m_vector.size())
return false;
m_vector.remove(row);
return true;
}
}class ChangeButtonEditor extends DefaultCellEditor {
private int hererow;
private JCheckBox m_checkBox;
private int targetPower;//中间变量
private TXIManageUserWarehouse manageUserWarehouse;
int index;//点击的位置
public ChangeButtonEditor(JCheckBox checkBox,final JTable m_table,final TXIManageUserWarehouse manageUserWarehouse,final TableData m_data) {
super(checkBox);
m_checkBox=checkBox;
this.manageUserWarehouse=manageUserWarehouse;
m_checkBox.setOpaque(false);
m_checkBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
//dataModel.setValueAt((Integer.parseInt(dataModel.getValueAt(hererow,3).toString()) +1)%3+"",hererow,3);
//button.setText(dataModel.getValueAt(hererow,3).toString());
index = m_table.getSelectedRow();
Vector temp_vector=manageUserWarehouse.getWarehousegroup();
int targetPower=((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(index)).getTargetpower();
if(0==targetPower)
{
targetPower=1;
}
else if(1==targetPower)
{
targetPower = 0;
}
((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(index)).setTargetpower(targetPower);
if(1==targetPower)
m_data.setValueAt(Boolean.TRUE,index,0);
else if(0==targetPower)
m_data.setValueAt(Boolean.FALSE,index,0);
m_table.setModel(m_data);
//m_data.setValueAt(Integer.valueOf(String.valueOf(targetPower)),index,0);
System.out.println("==========="+String.valueOf(targetPower)+"=============");
System.out.println("-------"+String.valueOf(index)+"--------");
}
});
} public Component getTableCellEditorComponent(JTable table, Object value,
boolean isSelected, int row, int column) {
hererow=row;
/**
Component component = getComponent();
if (component instanceof JCheckBox){
m_checkBox = (JCheckBox)component;
table.setValueAt(Boolean.valueOf(String.valueOf(m_checkBox.isSelected())),row,column);
return m_checkBox;
}
else
return component;
*/
return m_checkBox;
} public Object getCellEditorValue() {
return null ;
} public boolean stopCellEditing() {
return super.stopCellEditing();
//return true;
} protected void fireEditingStopped() {
//super.fireEditingStopped();
}
}
/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/public class TXIManageUserWarehouse
{
String resource = null;
String user=null;
//仓库id,仓库名称,初值,终值,放在hashtable中,再把hashtable放在vector中
Vector warehousegroup = new Vector();
warehouseProperty wp=new warehouseProperty();
String bizObjectPN = null;
String deptTableName = null;
String deptAuthoTableName = null;
String backPN = null; String bizFieldPN1 = null;
String bizFieldPN2 = null;
String bizFieldPN3 = null;
String bizFieldPN4 = null;
public class warehouseProperty
{
int warehouseId=0;
String warehouseName="";
int originPower=0;
int targetPower=0;
warehouseProperty(){}
public void setWarehouseId(int warehouseId)
{
this.warehouseId = warehouseId;
} public int getWarehouseId()
{
return warehouseId;
} public void setWarehousename(String warehouseName)
{
this.warehouseName = warehouseName;
} public String getWarehousename()
{
return warehouseName;
} public void setOriginpower(int originPower)
{
this.originPower = originPower;
} public int getOriginpower()
{
return originPower;
} public void setTargetpower(int targetPower)
{
this.targetPower = targetPower;
} public int getTargetpower()
{
return targetPower;
}
}
//Hashtable Power=new Hashtable();
//int originPower;//从用户权限表中赋值,固定值=0;从权限列表中赋值,固定值=1
//int targetPower;//从权限表中赋值,初值=0,在界面中改变=1
public TXIManageUserWarehouse()
{
}
//用户的权限存在一张表中,权限列表在一张表中,是两张表.
public TXIManageUserWarehouse(boolean flag)
{
warehouseProperty wp=new warehouseProperty();
wp.setWarehouseId(0);
wp.setWarehousename("仓库0");
wp.setOriginpower(0);
wp.setTargetpower(0);
warehousegroup.add(wp);
wp=new warehouseProperty();
wp.setWarehouseId(1);
wp.setWarehousename("仓库1");
wp.setOriginpower(0);
wp.setTargetpower(0);
warehousegroup.add(wp);
wp=new warehouseProperty();
wp.setWarehouseId(2);
wp.setWarehousename("仓库2");
wp.setOriginpower(0);
wp.setTargetpower(0);
warehousegroup.add(wp);
wp=new warehouseProperty();
wp.setWarehouseId(3);
wp.setWarehousename("仓库3");
wp.setOriginpower(1);
wp.setTargetpower(0);
warehousegroup.add(wp);
wp=new warehouseProperty();
wp.setWarehouseId(4);
wp.setWarehousename("仓库4");
wp.setOriginpower(1);
wp.setTargetpower(0);
warehousegroup.add(wp);
//wp=null;
/**
Hashtable tempHt=new Hashtable();
tempHt.put("warehouseid",Integer.valueOf("0"));
tempHt.put("warehousename",(String)"仓库0");
tempHt.put("originPower",Integer.valueOf("0"));
tempHt.put("targetPower",Integer.valueOf("0"));
warehousegroup.add(tempHt);
tempHt=null;
tempHt.put("warehouseid",Integer.valueOf("1"));
tempHt.put("warehousename",(String)"仓库1");
tempHt.put("originPower",Integer.valueOf("0"));
tempHt.put("targetPower",Integer.valueOf("0"));
warehousegroup.add(tempHt);
tempHt=null;
tempHt.put("warehouseid",Integer.valueOf("2"));
tempHt.put("warehousename",(String)"仓库2");
tempHt.put("originPower",Integer.valueOf("0"));
tempHt.put("targetPower",Integer.valueOf("0"));
warehousegroup.add(tempHt);
tempHt=null;
tempHt.put("warehouseid",Integer.valueOf("3"));
tempHt.put("warehousename",(String)"仓库3");
tempHt.put("originPower",Integer.valueOf("1"));
tempHt.put("targetPower",Integer.valueOf("0"));
warehousegroup.add(tempHt);
tempHt=null;
tempHt.put("warehouseid",Integer.valueOf("4"));
tempHt.put("warehousename",(String)"仓库4");
tempHt.put("originPower",Integer.valueOf("1"));
tempHt.put("targetPower",Integer.valueOf("0"));
warehousegroup.add(tempHt);
tempHt=null;
/**
//从用户权限表中得到的值
if(flag)
{
originPower=0;
targetPower=0;
}
//从权限列表中得到的值
else
{
originPower=1;
targetPower=0;
}
*/
}
/*
public void setOriginPower(int originPower)
{
this.originPower=originPower;
}
public int getOriginPower()
{
return this.originPower;
}
public void setTargetPower(int targetPower)
{
this.targetPower=targetPower;
}
public int getTargetPower()
{
return this.targetPower;
}
*/
public void setWarehousegroup(Vector warehousegroup)
{
this.warehousegroup = warehousegroup;
}
public Vector getWarehousegroup()
{
return warehousegroup==null?null:warehousegroup;
}
public void setResource(String resource)
{
this.resource = resource;
}
public String getResource()
{
return resource==null?"":resource;
}
public void setUser(String user)
{
this.user = user;
}
public String getUser()
{
return user==null?"":user;
}
如下:
1、ChangeButtonEditor类改成CheckBoxCellEditorclass CheckBoxCellEditor extends DefaultCellEditor { private static JCheckBox m_checkBox = new JCheckBox(); public CheckBoxCellEditor() {
super(m_checkBox);
m_checkBox.setOpaque(false);
m_checkBox.setHorizontalAlignment(JLabel.CENTER);
} public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
if (value instanceof Boolean)
{
Boolean b = (Boolean) value;
m_checkBox.setSelected(b.booleanValue());
} m_checkBox.setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
m_checkBox.setForeground(isSelected ? table.getSelectionForeground() : table.getForeground());
/**
* Component component = getComponent(); if (component instanceof JCheckBox){ m_checkBox = (JCheckBox)component;
*
*
* table.setValueAt(Boolean.valueOf(String.valueOf(m_checkBox.isSelected())),row,column); return m_checkBox; } else return component;
*/ return m_checkBox;
} public Object getCellEditorValue() {
return new Boolean(m_checkBox.isSelected());
}
}2、CheckCellRenderer改成CheckBoxCellRendererclass CheckBoxCellRenderer extends JCheckBox implements TableCellRenderer {
protected static Border m_noFocusBorder; public CheckBoxCellRenderer() {
super();
m_noFocusBorder = new EmptyBorder(1, 2, 1, 2);
setHorizontalAlignment(JLabel.CENTER);
setOpaque(true);
setBorder(m_noFocusBorder);
} public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value instanceof Boolean)
{
Boolean b = (Boolean) value;
setSelected(b.booleanValue());
} setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
setForeground(isSelected ? table.getSelectionForeground() : table.getForeground()); setFont(table.getFont());
setBorder(hasFocus ? UIManager.getBorder("Table.focusCellHighlightBorder") : m_noFocusBorder); return this;
}}看看是不是你要的?
另:CheckBox在Table里一般使用中间对齐方式,这是一个使用习惯,当然你一定要左对齐也没问题
TableCellEditor editor = new ChangeButtonEditor(new JCheckBox(),m_table,manageUserWarehouse,m_data);
这两句你改了吗?应该改成
TableCellRenderer renderer = new CheckBoxCellRenderer();
TableCellEditor editor = new CheckBoxCellEditor();
boolean isSelected, int row,
int column)
{
//关键位置,要加入这一段,就可以修改点一个checkbox同时也改另一个的bug.
if (value instanceof Boolean)
{
Boolean b = (Boolean) value;
m_checkBox.setSelected(b.booleanValue());
} m_checkBox.setBackground(isSelected ? table.getSelectionBackground() :
table.getBackground());
m_checkBox.setForeground(isSelected ? table.getSelectionForeground() :
table.getForeground()); return m_checkBox;
}
您让改了这一段以后就好了.这个就能解决您上面所说的问题吗?
是的话可以在选择时间中调用checkbox的stopCellEditing方法
if (value instanceof Boolean)
{
Boolean b = (Boolean) value;
m_checkBox.setSelected(b.booleanValue());
}
把编辑器的显示值设为你数据里面的值
m_checkBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
//dataModel.setValueAt((Integer.parseInt(dataModel.getValueAt(hererow,3).toString()) +1)%3+"",hererow,3);
//button.setText(dataModel.getValueAt(hererow,3).toString());
index = m_table.getSelectedRow();
Vector temp_vector=manageUserWarehouse.getWarehousegroup();
int targetPower=((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(index)).getTargetpower();
if(0==targetPower)
{
targetPower=1;
}
else if(1==targetPower)
{
targetPower = 0;
}
((TXIManageUserWarehouse.warehouseProperty)temp_vector.elementAt(index)).setTargetpower(targetPower);
if(1==targetPower)
m_data.setValueAt(Boolean.TRUE,index,0);
else if(0==targetPower)
m_data.setValueAt(Boolean.FALSE,index,0);
m_table.setModel(m_data);
//m_data.setValueAt(Integer.valueOf(String.valueOf(targetPower)),index,0);
System.out.println("==========="+String.valueOf(targetPower)+"=============");
System.out.println("-------"+String.valueOf(index)+"--------");
}
});