簡體   English   中英

Java繼承/重用能力

[英]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個方法

  • 一種用於數據庫連接
  • 其他的gui
    當我嘗試訪問connectDB()內的placeComponent()的屬性時,它顯示一個錯誤。 有人可以幫我嗎?

錯誤發生在executeUpdate語句中,在該語句中無法識別“ idtextfield”和“ nametextfield”

謝謝!!!

我建議您從Swing教程中的示例開始,以學習如何更好地構建程序。

也許有關如何使用標簽的部分將是一個很好的簡單示例。 在此示例中,面板用於包含所有組件。 這將允許您創建實例變量,您可以從在面板類中實現的任何方法訪問該實例變量。

從工作示例開始的其他好處:

  1. 您擺脫了靜態方法。

  2. 它不使用setBounds()。 Swing被設計為與布局管理器一起使用。 請參見布局管理器中的教程部分。

  3. 該代碼將在EDT上創建。 請參閱關於Concurrency的教程部分。

在課程級別聲明/定義它們兩者:

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個方法placeComponentsconnectDB() 您已經在placeComponents()方法中聲明並初始化了變量idtextfieldnametextfield ,並嘗試從connectDB()方法訪問它。 變量的范圍僅在方法placeComponents() 因此,它給出了“無法識別'idtextfield'和'nametextfield'”的錯誤。

您可以通過兩種方式解決此問題。

  1. 您可以在課程中聲明它們。

  2. 您可以從JPanel實例獲取實例。

在這方面,我想提醒您注意另一件事。 您已使用Statement使用用戶輸入的文本執行查詢。 有可能發生“ SQL注入”。 因此,最好改用PreparedStatement

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM