自己用swing类做个小程序遇到3个问题
初学,问题应该比较简单,编译无错误,但是功能并没有实现 1,程序里用到了菜单,一共4个菜单项,点击不同的菜单项在窗口的内容面板中加入不同的界面问题出现了,点击第一个菜单项后,界面顺利出现了,点击第二个菜单项后,两个界面重叠 在一起了,其实我知道问题出在哪里,在awt里可以用removeAll函数解决这个问题,但是在swing里使用这个函数就运行不下去了,直接死机了
想问一下,应该用什么函数。 2,程序中用到了模糊查询,输入了姓之后,点击查询,列表没反映,先说明,程序里的精确查询功能没问题,说明数据库之类的东西没发生错误,我觉得是SQL语句好象写的不对,但是不知道怎么改,模糊查询功能的代码如下: class 模糊查询 extends JPanel implements ActionListener
{
JButton button;
JTextField text;
Object a[][];
Object name[]={"姓名","性别","通讯地址","联系方式"};
JLabel label,label1,label2;
JPanel panel1,panel2,panel3;
JTable table;
模糊查询()
{ setLayout(new BorderLayout());
label1=new JLabel(" ");
label2=new JLabel(" ");
label=new JLabel("查找姓名");
button=new JButton("确定");
text=new JTextField(20);
panel1=new JPanel();
panel2=new JPanel();
panel3=new JPanel();
a=new Object[20][20];
table=new JTable(a,name);
panel1.add(label);
panel1.add(text);
panel2.add(new JScrollPane(table));
panel3.add(label1);
panel3.add(button);
panel3.add(label2);
add(panel1,BorderLayout.NORTH);
add(panel2,BorderLayout.CENTER);
add(panel3,BorderLayout.SOUTH);
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button)
{ try{
mohuchaxun();
}
catch(SQLException ee) {}
}
}
public void mohuchaxun() throws SQLException
{
String c="'"+text.getText().trim()+"%"+"'";
String name,sex,adress,tel;
int i=0;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e) {}
Connection sql=DriverManager.getConnection("jdbc:odbc:dreambird","","");
Statement go=sql.createStatement();
ResultSet rs=go.executeQuery("SELECT * FROM tongxunlu WHERE 姓名 LIKE c");
boolean boo=false;
while(rs.next())
{name=rs.getString(1);sex=rs.getString(2);adress=rs.getString(3);tel=rs.getString(4);
a[i][0]=name;a[i][1]=sex;a[i][2]=adress;a[i][3]=tel;
boo=true;
i++;
}
if(boo==false)
{JOptionPane.showMessageDialog(this,"查询无此人","错误",JOptionPane.ERROR_MESSAGE);
}
sql.close();
}} 3,程序中有插入功能,和 上面的问题一样,输入具体内容后,点插入,但是数据库里没有变化插入功能代码如下: class 插入 extends JPanel implements ActionListener
{
JLabel label1,label2;
JButton button;
JPanel panel1,panel2;
JTextField text1,text2,text3,text4;
插入()
{
text1=new JTextField(16);
text2=new JTextField(16);
text3=new JTextField(16);
text4=new JTextField(16);
label1=new JLabel(" ");
label2=new JLabel(" ");
button=new JButton("确定插入");
panel1=new JPanel();
panel2=new JPanel();
setLayout(new BorderLayout());
Box box1,box2,basebox;
box1=Box.createVerticalBox();
box1.add(Box.createVerticalStrut(50));
box1.add(new JLabel("姓名"));
box1.add(Box.createVerticalStrut(50));
box1.add(new JLabel("性别"));
box1.add(Box.createVerticalStrut(50));
box1.add(new JLabel("通讯地址"));
box1.add(Box.createVerticalStrut(50));
box1.add(new JLabel("联系方式"));
box2=Box.createVerticalBox();
box2.add(Box.createVerticalStrut(50));
box2.add(text1);
box2.add(Box.createVerticalStrut(50));
box2.add(text2);
box2.add(Box.createVerticalStrut(50));
box2.add(text3);
box2.add(Box.createVerticalStrut(50));
box2.add(text4);
basebox=Box.createHorizontalBox();
basebox.add(box1);
basebox.add(Box.createHorizontalStrut(25));
basebox.add(box2);
panel1.add(basebox);
panel2.add(label1);
panel2.add(button);
panel2.add(label2);
add(panel1,BorderLayout.CENTER);
add(panel2,BorderLayout.SOUTH);
button.addActionListener(this); } public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button)
{ try{
charu();
}
catch(SQLException ee) {}
}
}
public void charu() throws SQLException
{ try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e) {}
Connection sql=null;Statement go=null;
String s1="'"+text1.getText().trim()+"'",
s2="'"+text2.getText().trim()+"'",
s3="'"+text3.getText().trim()+"'",
s4="'"+text4.getText().trim()+"'";
String s5="INSERT INTO tongxunlu VALUES ("+s1+","+s2+","+s3+","+s4+")";
sql=DriverManager.getConnection("jdbc:odbc:dreambird","","");
go.executeUpdate(s5);
sql.close();
}
} 最后想问个小问题(这个没分)
我在查询里用到了表格,查询以后,需要人为的点击表格,查找的内容才能在上面显示,有没有函数能直接显示一下啊,估计就是个刷新函数吧,请问是什么。。
因为是初学,代码可能比较垃圾,比较冗余,大家别笑话,都是这么过来的
初学,问题应该比较简单,编译无错误,但是功能并没有实现 1,程序里用到了菜单,一共4个菜单项,点击不同的菜单项在窗口的内容面板中加入不同的界面问题出现了,点击第一个菜单项后,界面顺利出现了,点击第二个菜单项后,两个界面重叠 在一起了,其实我知道问题出在哪里,在awt里可以用removeAll函数解决这个问题,但是在swing里使用这个函数就运行不下去了,直接死机了
想问一下,应该用什么函数。 2,程序中用到了模糊查询,输入了姓之后,点击查询,列表没反映,先说明,程序里的精确查询功能没问题,说明数据库之类的东西没发生错误,我觉得是SQL语句好象写的不对,但是不知道怎么改,模糊查询功能的代码如下: class 模糊查询 extends JPanel implements ActionListener
{
JButton button;
JTextField text;
Object a[][];
Object name[]={"姓名","性别","通讯地址","联系方式"};
JLabel label,label1,label2;
JPanel panel1,panel2,panel3;
JTable table;
模糊查询()
{ setLayout(new BorderLayout());
label1=new JLabel(" ");
label2=new JLabel(" ");
label=new JLabel("查找姓名");
button=new JButton("确定");
text=new JTextField(20);
panel1=new JPanel();
panel2=new JPanel();
panel3=new JPanel();
a=new Object[20][20];
table=new JTable(a,name);
panel1.add(label);
panel1.add(text);
panel2.add(new JScrollPane(table));
panel3.add(label1);
panel3.add(button);
panel3.add(label2);
add(panel1,BorderLayout.NORTH);
add(panel2,BorderLayout.CENTER);
add(panel3,BorderLayout.SOUTH);
button.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button)
{ try{
mohuchaxun();
}
catch(SQLException ee) {}
}
}
public void mohuchaxun() throws SQLException
{
String c="'"+text.getText().trim()+"%"+"'";
String name,sex,adress,tel;
int i=0;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e) {}
Connection sql=DriverManager.getConnection("jdbc:odbc:dreambird","","");
Statement go=sql.createStatement();
ResultSet rs=go.executeQuery("SELECT * FROM tongxunlu WHERE 姓名 LIKE c");
boolean boo=false;
while(rs.next())
{name=rs.getString(1);sex=rs.getString(2);adress=rs.getString(3);tel=rs.getString(4);
a[i][0]=name;a[i][1]=sex;a[i][2]=adress;a[i][3]=tel;
boo=true;
i++;
}
if(boo==false)
{JOptionPane.showMessageDialog(this,"查询无此人","错误",JOptionPane.ERROR_MESSAGE);
}
sql.close();
}} 3,程序中有插入功能,和 上面的问题一样,输入具体内容后,点插入,但是数据库里没有变化插入功能代码如下: class 插入 extends JPanel implements ActionListener
{
JLabel label1,label2;
JButton button;
JPanel panel1,panel2;
JTextField text1,text2,text3,text4;
插入()
{
text1=new JTextField(16);
text2=new JTextField(16);
text3=new JTextField(16);
text4=new JTextField(16);
label1=new JLabel(" ");
label2=new JLabel(" ");
button=new JButton("确定插入");
panel1=new JPanel();
panel2=new JPanel();
setLayout(new BorderLayout());
Box box1,box2,basebox;
box1=Box.createVerticalBox();
box1.add(Box.createVerticalStrut(50));
box1.add(new JLabel("姓名"));
box1.add(Box.createVerticalStrut(50));
box1.add(new JLabel("性别"));
box1.add(Box.createVerticalStrut(50));
box1.add(new JLabel("通讯地址"));
box1.add(Box.createVerticalStrut(50));
box1.add(new JLabel("联系方式"));
box2=Box.createVerticalBox();
box2.add(Box.createVerticalStrut(50));
box2.add(text1);
box2.add(Box.createVerticalStrut(50));
box2.add(text2);
box2.add(Box.createVerticalStrut(50));
box2.add(text3);
box2.add(Box.createVerticalStrut(50));
box2.add(text4);
basebox=Box.createHorizontalBox();
basebox.add(box1);
basebox.add(Box.createHorizontalStrut(25));
basebox.add(box2);
panel1.add(basebox);
panel2.add(label1);
panel2.add(button);
panel2.add(label2);
add(panel1,BorderLayout.CENTER);
add(panel2,BorderLayout.SOUTH);
button.addActionListener(this); } public void actionPerformed(ActionEvent e)
{
if(e.getSource()==button)
{ try{
charu();
}
catch(SQLException ee) {}
}
}
public void charu() throws SQLException
{ try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e) {}
Connection sql=null;Statement go=null;
String s1="'"+text1.getText().trim()+"'",
s2="'"+text2.getText().trim()+"'",
s3="'"+text3.getText().trim()+"'",
s4="'"+text4.getText().trim()+"'";
String s5="INSERT INTO tongxunlu VALUES ("+s1+","+s2+","+s3+","+s4+")";
sql=DriverManager.getConnection("jdbc:odbc:dreambird","","");
go.executeUpdate(s5);
sql.close();
}
} 最后想问个小问题(这个没分)
我在查询里用到了表格,查询以后,需要人为的点击表格,查找的内容才能在上面显示,有没有函数能直接显示一下啊,估计就是个刷新函数吧,请问是什么。。
因为是初学,代码可能比较垃圾,比较冗余,大家别笑话,都是这么过来的
我真的是初学,就是用普通的文本文档编辑,然后javac,java运行而已
Eclipse根本没听过。。
具体错误请把原代码帖出来再说
另外 可以使用setVisible(boolean bl);方法 bl=false隐藏 = true显示;
第二个
ResultSet rs=go.executeQuery("SELECT * FROM tongxunlu WHERE 姓名 LIKE "+c);
我只看了SQL 还有其他错误请在回帖
第三个
sql=DriverManager.getConnection("jdbc:odbc:dreambird","","");
go.executeUpdate(s5);// go? 没定义呀 不知道你是怎么编译成功的.
sql.close();建议:从设置Sql字符串开始
String s5="INSERT INTO tongxunlu VALUES (?,?,?,?)";
sql=DriverManager.getConnection("jdbc:odbc:dreambird","","");
pSta = sql.prepareStatement(s5);
pSta.setString(1, text1.getText().trim());
pSta.setString(2, text2.getText().trim());
pSta.setString(3, text3.getText().trim());
pSta.setString(4, text4.getText().trim());
pSta.executeUpdate();
pSta.close();
sql.close();我只看了SQL 还有其他错误请在回帖
第二个我翻了一下《数据库原理》,也改过来了
这40还是你的,我首先感谢你了 第3个我还没有改出来,前面有定义啊
Connection sql=null;Statement go=null;
就是光声明了,没有具体分配空间,我手里教材上就是这么写的
确实没有定义就直接用了,可能我上面说的不是很清楚,整个程序
确实编译了没有错误,前2个是我的小错误造成的,最后一个在点击
了“插入”按钮后,运行会异常,就是在dos窗口里出现各种英文那
种,我是看不懂,但是编译确实通过了。
Connection sql=null;Statement go=null; go = createStatement(); //go 没有初始化 加入这行!! String s1="'"+text1.getText().trim()+"'",
s2="'"+text2.getText().trim()+"'",
s3="'"+text3.getText().trim()+"'",
s4="'"+text4.getText().trim()+"'";
上面那帖写错了
建议把列名也写上去。
问题都解决了
非常感谢 PhoticX() 的热心帮助我结贴了