三个初级问题 每个20分 急用 在线等 题解结贴

dreambird1983 2005-12-26 04:32:07
自己用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();
}


}

最后想问个小问题(这个没分。。。)
我在查询里用到了表格,查询以后,需要人为的点击表格,查找的内容才能在上面显示,有没有函数能直接显示一下啊,估计就是个刷新函数吧,请问是什么。。。。。


因为是初学,代码可能比较垃圾,比较冗余,大家别笑话,都是这么过来的。。。。。。
...全文
165 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
PhoticX 2005-12-28
  • 打赏
  • 举报
回复
第一个不理想的话 去翻翻API吧

你的附加问题 加个事件试试 我没明白什么意思
PhoticX 2005-12-28
  • 打赏
  • 举报
回复
go = sql.createStatement(); //go 没有初始化 加入这行!!
上面那帖写错了
PhoticX 2005-12-28
  • 打赏
  • 举报
回复

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()+"'";
f_acme 2005-12-28
  • 打赏
  • 举报
回复
String s5="INSERT INTO tongxunlu VALUES ("+s1+","+s2+","+s3+","+s4+")";
建议把列名也写上去。
dreambird1983 2005-12-28
  • 打赏
  • 举报
回复
呵呵
问题都解决了

非常感谢 PhoticX() 的热心帮助

我结贴了

dreambird1983 2005-12-27
  • 打赏
  • 举报
回复
PhoticX朋友

前两个我今天已经解决了,第一个和你解决的方法一样,但是效果不理想,但总算是可以了
第二个我翻了一下《数据库原理》,也改过来了
这40还是你的,我首先感谢你了

第3个我还没有改出来,前面有定义啊
Connection sql=null;Statement go=null;
就是光声明了,没有具体分配空间,我手里教材上就是这么写的
确实没有定义就直接用了,可能我上面说的不是很清楚,整个程序
确实编译了没有错误,前2个是我的小错误造成的,最后一个在点击
了“插入”按钮后,运行会异常,就是在dos窗口里出现各种英文那
种,我是看不懂,但是编译确实通过了。。。。
PhoticX 2005-12-27
  • 打赏
  • 举报
回复
第一 JPanel继承了awt.Container中的remove(组件名)方法 可以使用这个
具体错误请把原代码帖出来再说
另外 可以使用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 还有其他错误请在回帖

dreambird1983 2005-12-26
  • 打赏
  • 举报
回复
不好意思
我真的是初学,就是用普通的文本文档编辑,然后javac,java运行而已
Eclipse根本没听过。。。。。

humanity 2005-12-26
  • 打赏
  • 举报
回复
reXXX 逐个试呗,

你没有一个能提示 字段和方法的 IDE ?

比如用 Eclipse ,你写了 Conn 之后 光标放到 Conn 后面紧跟着,这时按 Alt+/ 就会自动提示 , Connection conn = x ; co 这时你也按 Alt+/ ,它会提示 conn 给你选.

62,629

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧