如果妳想學好java的話,可以根據這個代碼加上我的註解去理解,但不要學這個代碼的變成方式或者說變成習慣,這個代碼基本上無誤,但犯了壹些常識性問題,如果養成了這些不好的習慣對以後的編程會有壞的影響。
我是英文學的java,所以有些註解可能不通順,但我盡力而為了。 有的註解有點長,所以妳復制到編譯器後稍微編輯壹下就可以運行。代碼是可以運行,沒有問題的。
------------------------------------
import javax.swing.*; //用來創建圖形界面,如窗口,表格,按鈕等。
import java.awt.*; //作用同上,但已經很少用,能用swing的地方就不要用awt
import java.awt.event.*;//事件管理和控制
import java.sql.*; //數據庫語句和操作
import java.lang.System;//這個不知道
/*下面的這6個沒有用,純屬寫出來嚇人*/
import javax.swing.tree.*;
import javax.swing.event.*;
import java.util.*;
import javax.swing.border.*;
import javax.swing.table.*;
import java.lang.String.*;
class Mywindow extends JFrame implements ActionListener//這個類implements actionlistener,意思就是它自己就可以執行actionListener的任務
{
JTextField txf=new JTextField(20); //建壹個文字編輯框,長度20(只可以輸入壹行文字)
JTextArea jt=new JTextArea(10,30);//建壹個文字編輯區域,長10寬30(可以回車然後輸入多行文字)
JButton btn1=new JButton("查詢");//建壹個 查詢 按鈕
Mywindow()//構造函數,每個類必有的,可以為空
{
JFrame frm=new JFrame("Search");//建壹個窗口(讓其他的東西有地方可放,和容器壹樣。是3個最高級別的容器之壹,其他兩個是applet和window)
frm.setBounds(400,300,450,350);//設置大小和位置,前兩個是坐標,後兩個是大小
Container con=getContentPane();//建壹個awt容器對象,用來添加其他元素,最好用這個添加元素。像:frm.add(all); 可以寫成 con.add(all);
JPanel pnl4=new JPanel();//建壹個面板用來添加其他元素(第二級別容器,最後需要被添加在frame上)
pnl4.setBorder(BorderFactory.createTitledBorder("Search"));//設置邊框樣式
pnl4.add(txf);//把文字編輯框添加到面板上
pnl4.add(btn1);//把按鈕添加到面板上
btn1.addActionListener(this);//添加事件行為監聽器(this),this意思是當前對象,呼應 implements ActionListener
JPanel pnl5=new JPanel();//同上
pnl5.setBorder(BorderFactory.createTitledBorder("Result"));//同上
jt.setWrapStyleWord(true);//這個忘了
jt.setLineWrap(true);//在區域規定的寬度下,如果文字的輸入到壹行最後則會自動令其壹行繼續,如果是(false),文字輸入就會在這壹行繼續知道回車
pnl5.add(new JScrollPane(jt));//個這個面板添加右側滾動條,當文字輸入超過 長* 寬後 滾動條出現
JPanel all=new JPanel();//同上
all.setLayout(new BorderLayout());//設置布局,borderlayout()分東西南北(上下左右)中五個部分 無論窗口多大,中間占得面積最大
all.add(pnl4,BorderLayout.NORTH);//添加壹個面板在上面
all.add(pnl5,BorderLayout.CENTER);//添加壹個在中間
frm.add(all);//把最大的這個面板添加到窗口上 也可以用con.add(all);
frm.setVisible(true);//設置窗口顯示屬性 如果false就是不顯示
frm.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});//加壹個窗口監聽 如果點小紅叉關閉窗口則系統推出
}
public void actionPerformed(ActionEvent e)//作為ActionListener類的構造函數,如果妳的class implements ActionListenser, 那就必須得有這個,也可以單獨寫壹個class,不過有點麻煩
{
if(e.getSource()==btn1)//當按鈕被點擊的時候
{
String str="";//建壹個字符串
String tmp=this.txf.getText();//同上,這個字符串的值是當前對象(窗口)中,文本框輸入的值
for(int k=0;k<tmp.length();k++)//建壹個 永久循環
str+=tmp.charAt(k)+"%";//把 % 插入每壹個字符後面, 作用後面說
String sql=null;//同上
Statement stmt=null;//定義壹個stmt,用來建數據庫連接的
sql="select * from chinese where charsound like'"+str+"'";//創建壹個sql數據庫語句,但它本身還是壹個字符串
System.out.println(sql);//系統顯示創建的語句,通常找錯時候用的
try{//try 和 catch 的作用壹句兩句說不清楚 不知道妳就自己查查
Class.forName("com.mysql.jdbc.Driver");//或者:Class.forName("org.gjt.mm.mysql.Driver");關聯mysql數據庫驅動
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/japan?user=root&password=sa");//建立連接,數據庫名japan(為什麽不是chinese?)用戶名root密碼sa
stmt=conn.createStatement();//建立statement對象,用來發送sql語句到數據庫
ResultSet rs=stmt.executeQuery(sql);//運行語句並建立壹個查詢結果的集合
System.out.println("\n------------------------search :"+str+"-------------------------------");//同上
jt.setText("");//清空文本編輯區域
while(rs.next())//while循環,當還有結果的時候,把所有查詢結果添加加到文本編輯區域中
{
jt.append(new String(rs.getString("charname").getBytes("iso-8859-1"),"gb2312")+"\t");
System.out.print(new String(rs.getString("charname").getBytes("iso-8859-1"),"gb2312")+"\t");
}
stmt.close();//關閉關連,很重要。
}
catch(Exception eq){System.out.println("error");}
//--------------------------------------------------------------end btn1-------
}
}
public static void main(String args[])
{
Mywindow win=new Mywindow();//建立壹個 mywindow 對象
win.pack();//將所有元素整合
win.show();
}
}