"每次的运行结果都和第二次一样"这句话有点歧义,我的意思是这样的:
每次在构造函数中显示的都随in[0]中的值的变化而变化,但在actionPerformed方法中,一直显示的都是111.
每次在构造函数中显示的都随in[0]中的值的变化而变化,但在actionPerformed方法中,一直显示的都是111.
解决方案 »
- 不显示删除回复显示所有回复显示星级回复显示得分回复 提示,未能打开编辑器:Unmatched braces in the pattern,这是什么原因?
- String arg : cmd 这是什么用法?
- 有人推荐个画图(diagram,或者UML那种图)的软件么?简单好用,可以export出来,然后放到word上面的。谢谢了!
- 为什么说JAVA是一个强类型语言?
- JDBC
- 如何实现日期的格式化输出,急用。。。
- java的窗口内容如何刷新?
- 小弟有一困惑,请各位有经验的大师帮忙指点!
- [解释]Profile 在下面几个场合中怎么翻译?怎么理解?
- 准备从DELPHI转向JAVA,诸位大侠,荐一本好书吧!(UP有分)
- JAVA到底用来干什么,一般使用什么编辑工具!
- :load:class applet1 not ???????????????ie傻了
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.util.*;
import java.sql.*;
import com.borland.jbcl.layout.*;public class RightsTable extends JPanel{
Object[][] m_RightsValue;
BorderLayout borderLayout1 = new BorderLayout();
JScrollPane jScrollPane1 = new JScrollPane();
JPanel jPanel1 = new JPanel();
JPanel jPanel2 = new JPanel();
JTable jTable1;
JButton jBtnOK = new JButton();
JButton jBtnCancel = new JButton();
JButton jBtnModifyRole = new JButton(); //修改角色或用户组所包含的角色
JButton jBtnMakeUserRights = new JButton(); //生成用户的最终权限列表字符串 FlowLayout flowLayout1 = new FlowLayout();
//String m_sGURID=new String(""); //传入的用户组(G)用户(U)角色(R)的ID
int m_nType; //设置权限的对象0--Role;1--Group;2--User
String m_sSelectedItem; String[] sHeader ={"权限对象描述","类别","权限值",
"权限对象描述","类别","权限值",
"权限对象描述","类别","权限值"}; //Vector vHeader = new Vector(); int[] tblColWidth = {125,10,12,125,10,12,125,10,12};
DefaultTableModel tableModel;
MyTableModel myTableModel;
JButton jButton1 = new JButton();
XYLayout xYLayout1 = new XYLayout();
JComboBox jCbSubSys = new JComboBox();
public String m_sGURID=new String(""); public RightsTable(String sID,int nType) {
try {
m_sGURID = sID;
m_nType = nType;
System.out.println("RightsTable " +m_sGURID);
System.out.println("m_sGURID in Constructor:" + m_sGURID);
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
} public void jbInit() throws Exception{
System.out.println("m_sGURID in jbInit:" + m_sGURID);
ActionListener com_als = new ActionListener(){
public void actionPerformed(ActionEvent e){
com_actionPerformed(e,m_sGURID);
}
}; this.setBorder(BorderFactory.createRaisedBevelBorder());
this.setLayout(borderLayout1);
jBtnOK.setPreferredSize(new Dimension(70, 25));
jBtnOK.setText("确定");
jBtnCancel.setPreferredSize(new Dimension(70, 25));
jBtnCancel.setText("取消");
jPanel1.setLayout(flowLayout1); //Construct the Table
tableModel = new DefaultTableModel(sHeader,40);
jTable1 = new JTable();
jTable1.setModel(tableModel);
for (int i = 0;i < tblColWidth.length;i ++)
jTable1.getColumnModel().getColumn(i).setPreferredWidth(tblColWidth[i]); jButton1.setBorder(BorderFactory.createEtchedBorder());
jButton1.setText("子系统列表");
jPanel2.setLayout(xYLayout1);
jPanel2.setPreferredSize(new Dimension(370, 50));
this.add(jScrollPane1, BorderLayout.CENTER);
jScrollPane1.getViewport().add(jTable1, null);
this.add(jPanel1, BorderLayout.SOUTH);
this.add(jPanel2,BorderLayout.NORTH);
jPanel2.add(jButton1, new XYConstraints(39, 5, 103, 28));
jPanel2.add(jCbSubSys, new XYConstraints(153, 5, 303, 29));
jPanel1.add(jBtnOK, null);
if (m_nType == 0 || m_nType == 1){
jBtnModifyRole.setPreferredSize(new Dimension(150, 25));
jBtnModifyRole.setText("修改所包含的角色");
jPanel1.add(jBtnModifyRole,null);
}
else if (m_nType == 2){
jBtnMakeUserRights.setPreferredSize(new Dimension(150,25));
jBtnMakeUserRights.setText("生成用户权限字符串");
jPanel1.add(jBtnMakeUserRights,null);
}
jPanel1.add(jBtnCancel, null); System.out.println("m_sGURID before fillcombobox:" + m_sGURID);
fillCombBox(); //Register the Listener
jBtnOK.addActionListener(com_als);
jBtnCancel.addActionListener(com_als);
jBtnModifyRole.addActionListener(com_als);
jBtnMakeUserRights.addActionListener(com_als); jCbSubSys.addItemListener(new ItemListener(){
public void itemStateChanged(ItemEvent event){
String item = (String)event.getItem();
String s = new String(" Selected");
if (event.getStateChange()==ItemEvent.SELECTED){
if (!item.substring(0,1).equals("-")){
JOptionPane.showMessageDialog(null,item+s);
m_sSelectedItem = item.substring(0,3);
getAllRights(m_sGURID,m_sSelectedItem);
myTableModel = new MyTableModel(m_RightsValue,sHeader);
myTableModel.setColumnEditable(2,true);
myTableModel.setColumnEditable(5,true);
myTableModel.setColumnEditable(8,true);
jTable1.setModel(myTableModel);
for (int i = 0;i < tblColWidth.length;i ++){
jTable1.getColumnModel().getColumn(i).setPreferredWidth(tblColWidth[i]);
//jTable1.getColumnModel().getColumn(i).setMaxWidth(tblColWidth[i]);
//jTable1.getColumnModel().getColumn(i).setMinWidth(tblColWidth[i]);
}
//当对用户进行权限设定时,首先要根据数据库中已有的个性化权限将权限列表中
//的复选框选中
String sPrivate = new String("");
if (m_nType == 2){
try{
ResultSet r = ConnToDB.executeQuery("Select QX0107 from QX01 where QX0100 = '" + m_sGURID + "'");
while(r.next()){
sPrivate = r.getString("QX0107");
}
r.close();
}catch(Exception ec){
ec.printStackTrace();
}
if (!sPrivate.equals("default")){
//System.out.println(sPrivate);
sPrivate = sPrivate.substring(7);
System.out.println(sPrivate);
}
} jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
//jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
jTable1.sizeColumnsToFit(true);
jTable1.validate();
jTable1.repaint();
jTable1.updateUI();
jScrollPane1.updateUI();
}
}
}
});
System.out.println("m_sGURID before end of jbInit:" + m_sGURID);
} void com_actionPerformed(ActionEvent e,String inID){
String theID = inID;
System.out.println("jjjjjjjjjjjjjjjjjjevent:" + theID);
if(e.getSource()==jBtnOK){
//从表格中读取各个权限位的信息,并将其转换成字符串存入数据库中
String temp = new String("");
Boolean bChecked;
for(int i=0;i<42;i++){
bChecked = (Boolean)myTableModel.getValueAt(i,2);
if (bChecked.booleanValue()){
temp = temp + "1";
}
else{
temp = temp + "0";
}
bChecked = (Boolean)myTableModel.getValueAt(i,5);
if (bChecked.booleanValue()){
temp = temp + "1";
}
else{
temp = temp + "0";
}
bChecked = (Boolean)myTableModel.getValueAt(i,8);
if (bChecked.booleanValue()){
temp = temp + "1";
}
else{
temp = temp + "0";
}
}
//循环结束后,权限字符串串一共126位,多出了一位,所以存入数据库前要去掉最后一位
//往数据库中存入权限字符串的时候,要把子系统编号添加在字符串最开头,并且要和数
//据库中已有的字符串比较:如果已有的字符串中不包含当前子系统的字符串,直接把刚生成的
//字符串加在以有字符串中;如果已有的字符串中包含当前子系统的字符串,则需要用刚生成的
//字符串来替代已有的部分
temp = m_sSelectedItem + "#" + temp.substring(0,temp.length()-1); System.out.println("m_sGURID="+m_sGURID);
int nPos = 0;
String oldRightsString = new String("");
String newRightsString = new String("");
try{ switch(m_nType){
//角色个性化权限字符串
case 0:
ResultSet rRole = ConnToDB.executeQuery("select QX0303 from QX03 where QX0300='" + m_sGURID + "'");
while(rRole.next()){
oldRightsString = rRole.getString("QX0303");
}
rRole.close();
if (oldRightsString.substring(0,7).equals("default"))
oldRightsString = oldRightsString.substring(7); System.out.println(oldRightsString);
nPos = oldRightsString.indexOf(temp.substring(0,4));
if (nPos!=-1){
newRightsString = oldRightsString.substring(0,nPos) + temp + oldRightsString.substring(nPos+129);
}
else if(nPos==-1){
newRightsString = oldRightsString + temp;
}
System.out.println(newRightsString);
ConnToDB.executeUpdate("Update QX03 set QX0303='" + newRightsString + "' where QX0300='" + m_sGURID + "'");
break;
//用户组个性化权限字符串
case 1:
ResultSet rGroup = ConnToDB.executeQuery("select QX0203 from QX02 where QX0200='" + m_sGURID + "'");
while(rGroup.next()){
oldRightsString = rGroup.getString("QX0203");
}
rGroup.close();
if (oldRightsString.substring(0,7).equals("default"))
oldRightsString = oldRightsString.substring(7);
System.out.println(oldRightsString);
nPos = oldRightsString.indexOf(temp.substring(0,4));
if (nPos!=-1){
newRightsString = oldRightsString.substring(0,nPos) + temp + oldRightsString.substring(nPos+129);
}
else if(nPos==-1){
newRightsString = oldRightsString + temp;
}
System.out.println(newRightsString);
ConnToDB.executeUpdate("Update QX02 set QX0203='" + newRightsString + "' where QX0200='" + m_sGURID + "'"); break;
//用户个性化权限字符串
case 2:
ResultSet rUser = ConnToDB.executeQuery("select QX0107 from QX01 where QX0100='" + m_sGURID + "'");
while(rUser.next()){
oldRightsString = rUser.getString("QX0107");
}
rUser.close();
if (oldRightsString.substring(0,7).equals("default"))
oldRightsString = oldRightsString.substring(7);
System.out.println("oldRightsString:" + oldRightsString);
nPos = oldRightsString.indexOf(temp.substring(0,4));
if (nPos!=-1){
newRightsString = oldRightsString.substring(0,nPos) + temp + oldRightsString.substring(nPos+129);
}
else if(nPos==-1){
newRightsString = oldRightsString + temp;
}
System.out.println("newRightsString:" + newRightsString);
ConnToDB.executeUpdate("Update QX01 set QX0107='" + newRightsString + "' where QX0100='" + m_sGURID + "'"); break;
default:
break;
} } catch (Exception e1) {
e1.printStackTrace();
} }
else if (e.getSource()==jBtnCancel){ }
else if (e.getSource()==jBtnModifyRole){
System.out.println("m_sGURID in event:" + m_sGURID);
//ExistRolesDlg ModifyRoleDlg = new ExistRolesDlg(1,2,m_sGURID);
//ModifyRoleDlg.show();
}
else if (e.getSource()==jBtnMakeUserRights){ }
} void fillCombBox(){
String[] sFillValue = new String[8];
String[] sSubSysNo = {"000","001","010","011","100","101","110","111"};
jCbSubSys.addItem("---请选择需要配置权限的应用子系统---");
for (int i=0;i<sFillValue.length;i++){
sFillValue[i] = sSubSysNo[i]+"---应用子系统" +i;
jCbSubSys.addItem(sFillValue[i]);
}
} //测试用,未从数据库取数据
void getAllRights(String sID,String sSubSysNo){
//sID为传入的组,角色,用户的ID号,根据此ID号取出权限字符串,并和权限配置表配合
//取得该对象的所有权限信息
boolean bRights;
m_RightsValue = new Object[42][9];
for (int i=0;i<42;i++){
//if (i%2==0)
// bRights = false;
//else
// bRights = true;
for (int j=0;j<3;j++){
//if (i==39 && j!=0){
// m_RightsValue[i][0+j*3] = null;
// m_RightsValue[i][1+j*3] = null;
// m_RightsValue[i][2+j*3] = null;
//}
//else{
m_RightsValue[i][0+j*3] = sSubSysNo+"---"+"权限对象描述" + (i*3+j);
m_RightsValue[i][1+j*3] = new Integer(i%5);
m_RightsValue[i][2+j*3] = new Boolean(false);
//}
}
}
}}
com_actionPerformed(ActionEvent e,String inID)中的inID可以不要,我是拿来调试的,但即使是我把m_sGURID作为参数传递给com_actionPerformed,仍然不正确,我真是没招了!
谢谢luodi莅临指导!
所以按下按钮才会一直出现"111"
jRightsPanel = new RightsTable(in[0],nFlag);
jPanelRight.add(jRightsPanel,BorderLayout.CENTER);
jRightsPanel.setVisible(true);
jRightsPanel.updateUI();我还要怎么做呢?
Java没有c++那样的析构函数呀.
我再试试,实在不行的话,再把代码发给你.
前一段时间忙了点别的事情,这段程序编了这么长还没有完成,真是不好意思啊!呵呵.
按照你们的建议,我重新加了一遍Panel:
if (jRightsPanel != null)
jPanelRight.remove(jRightsPanel);jRightsPanel = new RightsTable(in[0],nFlag);
jPanelRight.add(jRightsPanel,BorderLayout.CENTER);
jRightsPanel.setVisible(true);
jRightsPanel.updateUI();
jPanelRight.updateUI();果然就好了!
多谢wolfsquare和luodi!!!
wolfsquare大哥最近工作很忙吧?祝一切顺利,顺利,再顺利!