[英]Java Inheritance/Reuse-ability in swing
package fisheriesdatabase;
import java.sql.*;
import java.awt.Container;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class FisheriesDatabase {
public static void main(String[] args) {
JFrame frame=new JFrame("Fish Data Entry");
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel=new JPanel();
frame.add(panel);
placeComponents(panel);
frame.setVisible(true);
}
public static void placeComponents(JPanel panel){
panel.setLayout(null);
JLabel idlabel=new JLabel("id");
idlabel.setBounds(10, 10, 80, 25);
panel.add(idlabel);
JTextField idtextfield=new JTextField(20);
idtextfield.setBounds(100, 10, 160, 25);
panel.add(idtextfield);
JLabel namelabel=new JLabel("Name");
namelabel.setBounds(10, 40, 80, 25);
panel.add(namelabel);
JTextField nametextfield=new JTextField(20);
nametextfield.setBounds(100, 40, 160, 25);
panel.add(nametextfield);
JButton button=new JButton("Enter Data");
button.setBounds(10, 80, 80, 25);
panel.add(button);
}
public static void connectDB() throws SQLException{
final String url="jdbc:mysql://localhost:3306";
final String driver="com.mysql.jdbc.Driver";
final String dbName="netbeans_test";
final String uname="root";
final String pass="";
Connection conn=null;
try{
//Registering the Driver
Class.forName(driver).newInstance();
//Open a connection
conn=DriverManager.getConnection(url+dbName,uname,pass);
Statement st=conn.createStatement();
st.executeUpdate("insert into test values('"+idtextfield.getText()+"','"+nametextfield.getText()+"')");
}
catch(ClassNotFoundException | InstantiationException | IllegalAccessException se){
if(conn==null)
System.err.println("DATABASE NOT CONNECTED");
se.printStackTrace();
}
}
}
上面提到的代碼是我開始使用Swing的開始,作為一個新手,我只是嘗試創建2個方法
錯誤發生在executeUpdate語句中,在該語句中無法識別“ idtextfield”和“ nametextfield”
謝謝!!!
在課程級別聲明/定義它們兩者:
public class FisheriesDatabase {
JTextField idtextfield=new JTextField(20);
JTextField nametextfield=new JTextField(20);
public static void main(String[] args) {
....
....
}
public static void placeComponents(JPanel panel){
panel.setLayout(null);
.....
}
您的程序中基本上只有一個問題。 您正在使用2個方法placeComponents
和connectDB()
。 您已經在placeComponents()
方法中聲明並初始化了變量idtextfield
和nametextfield
,並嘗試從connectDB()
方法訪問它。 變量的范圍僅在方法placeComponents()
。 因此,它給出了“無法識別'idtextfield'和'nametextfield'”的錯誤。
您可以通過兩種方式解決此問題。
您可以在課程中聲明它們。
您可以從JPanel
實例獲取實例。
在這方面,我想提醒您注意另一件事。 您已使用Statement
使用用戶輸入的文本執行查詢。 有可能發生“ SQL注入”。 因此,最好改用PreparedStatement
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.