Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java和mysql自动填充表单_Java_Mysql_Swing_Jtable_Jtextfield - Fatal编程技术网

使用Java和mysql自动填充表单

使用Java和mysql自动填充表单,java,mysql,swing,jtable,jtextfield,Java,Mysql,Swing,Jtable,Jtextfield,我在我的这个小项目中使用java Swigs。我有四个文本字段rollno、name、class和section以及search按钮。单击search按钮(文本字段为空)后,我会从数据库中的一个新表(使用Jtable)中获得所有表项(列名与文本字段相同)的列表。这就是我目前拥有的 现在,假设我单击一行,我希望数据通过鼠标单击显示在文本字段中,我应该怎么做 这是我的密码: import javax.swing.*; import javax.swing.table.DefaultTableMode

我在我的这个小项目中使用java Swigs。我有四个文本字段rollno、name、class和section以及search按钮。单击search按钮(文本字段为空)后,我会从数据库中的一个新表(使用Jtable)中获得所有表项(列名与文本字段相同)的列表。这就是我目前拥有的

现在,假设我单击一行,我希望数据通过鼠标单击显示在文本字段中,我应该怎么做

这是我的密码:

import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import java.awt.*;
import java.sql.*;
import java.awt.event.*;

public class SearchResult implements ActionListener{
    JFrame frame,frame1;
    JTextField textbox,textbox1,textbox2,textbox3,textbox4,textbox5,textbox6,textbox7,textbox8;
    JLabel label,label1,label2,label3,label4,label5,label6,label7,label8;
    JButton button;
    JPanel panel;
    static JTable table;

    String driverName = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://localhost:3306/mydb";
    String userName = "root";
    String password = "root";
    String[] columnNames = {"Roll No", "Name", "Class", "Section"};

    public void createUI()
    {
        frame = new JFrame("Database Search Result");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(null);
        textbox = new JTextField();
        textbox.setBounds(120,30,150,20); 
        label=new JLabel("Roll No.");
        label.setBounds(10, 30, 100, 20);
        textbox1 = new JTextField();
        textbox1.setBounds(120,50,150,20); 
        label1=new JLabel("Name");
        label1.setBounds(10, 50, 100, 20);
        textbox2 = new JTextField();
        textbox2.setBounds(120,70,150,20); 
        label2=new JLabel("Class");
        label2.setBounds(10, 70, 100, 20);
        textbox3 = new JTextField();
        textbox3.setBounds(120,90,150,20); 
        label3=new JLabel("Section");
        label3.setBounds(10, 90, 100, 20);
        button = new JButton("search");
        button.setBounds(120,230,150,20);
        button.addActionListener(this);
        frame.add(textbox);
        frame.add(label);
        frame.add(textbox1);
        frame.add(label1);
        frame.add(textbox2);
        frame.add(label2);
        frame.add(textbox3);
        frame.add(label3);
        frame.add(button);
        frame.setVisible(true);
        frame.setSize(500, 400);        
    }   

    public void actionPerformed(ActionEvent ae)
    {
        button = (JButton)ae.getSource();
        System.out.println("Showing Table Data.......");
            showTableData();            
    }   

    public void showTableData()
    {

        frame1 = new JFrame("Database Search Result");
        //frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setLayout(new BorderLayout());       
        //TableModel tm = new TableModel();
        DefaultTableModel model = new DefaultTableModel();
        model.setColumnIdentifiers(columnNames);
        //DefaultTableModel model = new DefaultTableModel(tm.getData1(), tm.getColumnNames());      
        //table = new JTable(model);
        table = new JTable();
        table.setModel(model);      
        table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        table.setFillsViewportHeight(true);
        JScrollPane scroll = new JScrollPane(table);
        scroll.setHorizontalScrollBarPolicy(
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scroll.setVerticalScrollBarPolicy(
                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);      
        String textvalue = textbox.getText();
        String roll= "";
        String name= "";
        String cl = "";
        String sec = "";
        try
        {           
            Class.forName(driverName);      
            Connection con = DriverManager.getConnection(url, userName, password);
            //String sql = "select * from student where rollno = "+textvalue;
            String sql="select * from student";
            PreparedStatement ps = con.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            int i =0;
            while(rs.next())
            {
                roll = rs.getString("rollno");
                name = rs.getString("name");
                cl = rs.getString("class");
                sec = rs.getString("section");                  
                model.addRow(new Object[]{roll, name, cl, sec});

            }
        }
        catch(Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage(),"Error",
                    JOptionPane.ERROR_MESSAGE);
        }
        frame1.add(scroll);
        frame1.setVisible(true);
        frame1.setSize(400,300);
    }

    public static void main(String args[])
    {
        SearchResult sr = new SearchResult();
                sr.createUI();              
    }
}
更新代码

import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;

import java.awt.*;
import java.sql.*;
import java.util.Vector;
import java.awt.event.*;

public class barcoder implements ActionListener{
    JFrame frame,frame1;
    JTextField textbox,textbox1,textbox2,textbox3,textbox4,textbox5,textbox6,textbox7,textbox8;
    JLabel label,label1,label2,label3,label4,label5,label6,label7,label8;
    JButton button;
    JPanel panel;
    static JTable table;

    String driverName = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://localhost:3306/mydb";
    String userName = "root";
    String password = "root";
    String[] columnNames = {"Roll No", "Name", "Class", "Section"};

    public void createUI()
    {
        frame = new JFrame("Database Search Result");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(null);
        textbox = new JTextField();
        textbox.setBounds(120,30,150,20); 
        label=new JLabel("Roll No.");
        label.setBounds(10, 30, 100, 20);
        textbox1 = new JTextField();
        textbox1.setBounds(120,50,150,20); 
        label1=new JLabel("Name");
        label1.setBounds(10, 50, 100, 20);
        textbox2 = new JTextField();
        textbox2.setBounds(120,70,150,20); 
        label2=new JLabel("Class");
        label2.setBounds(10, 70, 100, 20);
        textbox3 = new JTextField();
        textbox3.setBounds(120,90,150,20); 
        label3=new JLabel("Section");
        label3.setBounds(10, 90, 100, 20);
        button = new JButton("search");
        button.setBounds(120,230,150,20);
        button.addActionListener(this);
        frame.add(textbox);
        frame.add(label);
        frame.add(textbox1);
        frame.add(label1);
        frame.add(textbox2);
        frame.add(label2);
        frame.add(textbox3);
        frame.add(label3);
        frame.add(button);
        frame.setVisible(true);
        frame.setSize(500, 400);        
    }   

    public void actionPerformed(ActionEvent ae)
    {
        button = (JButton)ae.getSource();
        System.out.println("Showing Table Data.......");
            showTableData();            
    }   

    public void showTableData()
    {

        frame1 = new JFrame("Database Search Result");
        //frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setLayout(new BorderLayout());       
        //TableModel tm = new TableModel();
         DefaultTableModel model = new DefaultTableModel(){
            @Override
            public boolean isCellEditable(int row, int column) { 
             return false;  
            }
        };
        model.setColumnIdentifiers(columnNames);
        //DefaultTableModel model = new DefaultTableModel(tm.getData1(), tm.getColumnNames());      
        //table = new JTable(model);
        table = new JTable();
        table.setModel(model); 
        model.addTableModelListener(new TableModelListener() {
            int row = table.getSelectedRow();
            @Override
            public void tableChanged(TableModelEvent arg0) {
                int row = table.getSelectedRow();
                System.out.println("Selecte table row = " + row);
                if (row != -1) {
                    int modelRow = table.convertRowIndexToModel(row);
                    System.out.println("Selecte model row = " + row);
                    Vector data = (Vector) ((DefaultTableModel) table.getModel()).getDataVector().get(modelRow);
                    textbox.setText(data.get(0).toString());
                    textbox1.setText(data.get(1).toString());
                    textbox2.setText(data.get(2).toString());
                    textbox3.setText(data.get(3).toString());
                }
            }
        });
        table.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {
                    if (table.getSelectedRow() != -1) {
                        SwingUtilities.getWindowAncestor(table).dispose();
                    }
                }
            }
        });
        table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        table.setFillsViewportHeight(true);
        JScrollPane scroll = new JScrollPane(table);
        scroll.setHorizontalScrollBarPolicy(
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scroll.setVerticalScrollBarPolicy(
                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);      
        String textvalue = textbox.getText();
        String roll= "";
        String name= "";
        String cl = "";
        String sec = "";
        try
        {           
             Class.forName(driverName);      
            Connection con = DriverManager.getConnection(url, userName, password);
            //String sql = "select * from student where rollno = "+textvalue;
            String sql="select * from student";
            PreparedStatement ps = con.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            int i =0;
            while(rs.next())
            {
                roll = rs.getString("rollno");
                name = rs.getString("name");
                cl = rs.getString("class");
                sec = rs.getString("section");                  
                model.addRow(new Object[]{roll, name, cl, sec});

            }
        }
        catch(Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage(),"Error",
                    JOptionPane.ERROR_MESSAGE);
        }
        frame1.add(scroll);
        frame1.setVisible(true);
        frame1.setSize(400,300);
    }

    public static void main(String args[])
    {
        barcoder sr = new barcoder();
                sr.createUI();              
    }
}
按照这个办法,

单击表中的行,读取选定行的值并将其填充到相应字段中

import javax.swing.*;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableModel;

import java.awt.*;
import java.sql.*;
import java.awt.event.*;

public class SearchResult implements ActionListener{
    JFrame frame,frame1;
    JTextField textbox,textbox1,textbox2,textbox3,textbox4,textbox5,textbox6,textbox7,textbox8;
    JLabel label,label1,label2,label3,label4,label5,label6,label7,label8;
    JButton button;
    JPanel panel;
    static JTable table;

    String driverName = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://localhost:3306/mydb";
    String userName = "root";
    String password = "root";
    String[] columnNames = {"Roll No", "Name", "Class", "Section"};

    public void createUI()
    {
        frame = new JFrame("Database Search Result");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(null);
        textbox = new JTextField();
        textbox.setBounds(120,30,150,20); 
        label=new JLabel("Roll No.");
        label.setBounds(10, 30, 100, 20);
        textbox1 = new JTextField();
        textbox1.setBounds(120,50,150,20); 
        label1=new JLabel("Name");
        label1.setBounds(10, 50, 100, 20);
        textbox2 = new JTextField();
        textbox2.setBounds(120,70,150,20); 
        label2=new JLabel("Class");
        label2.setBounds(10, 70, 100, 20);
        textbox3 = new JTextField();
        textbox3.setBounds(120,90,150,20); 
        label3=new JLabel("Section");
        label3.setBounds(10, 90, 100, 20);
        button = new JButton("search");
        button.setBounds(120,230,150,20);
        button.addActionListener(this);
        frame.add(textbox);
        frame.add(label);
        frame.add(textbox1);
        frame.add(label1);
        frame.add(textbox2);
        frame.add(label2);
        frame.add(textbox3);
        frame.add(label3);
        frame.add(button);
        frame.setVisible(true);
        frame.setSize(500, 400);        
    }   

    public void actionPerformed(ActionEvent ae)
    {
        button = (JButton)ae.getSource();
        System.out.println("Showing Table Data.......");
            showTableData();            
    }   

    public void showTableData()
    {

        frame1 = new JFrame("Database Search Result");
        //frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame1.setLayout(new BorderLayout());       
        //TableModel tm = new TableModel();
        final DefaultTableModel model = new DefaultTableModel();
        model.setColumnIdentifiers(columnNames);
        //DefaultTableModel model = new DefaultTableModel(tm.getData1(), tm.getColumnNames());      
        //table = new JTable(model);
        table = new JTable();
        table.setModel(model); 
        model.addTableModelListener(new TableModelListener() {
            int row = table.getSelectedRow();
            @Override
            public void tableChanged(TableModelEvent arg0) {
                int modelRow = table.convertRowIndexToModel(row);

                textbox1.setText(model.getDataVector().get(0).toString());


            }
        });
        table.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
        table.setFillsViewportHeight(true);
        JScrollPane scroll = new JScrollPane(table);
        scroll.setHorizontalScrollBarPolicy(
                JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scroll.setVerticalScrollBarPolicy(
                JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);      
        String textvalue = textbox.getText();
        String roll= "";
        String name= "";
        String cl = "";
        String sec = "";
        try
        {           
             Class.forName(driverName);      
            Connection con = DriverManager.getConnection(url, userName, password);
            //String sql = "select * from student where rollno = "+textvalue;
            String sql="select * from student";
            PreparedStatement ps = con.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            int i =0;
            while(rs.next())
            {
                roll = rs.getString("rollno");
                name = rs.getString("name");
                cl = rs.getString("class");
                sec = rs.getString("section");                  
                model.addRow(new Object[]{roll, name, cl, sec});

            }
        }
        catch(Exception ex)
        {
            JOptionPane.showMessageDialog(null, ex.getMessage(),"Error",
                    JOptionPane.ERROR_MESSAGE);
        }
        frame1.add(scroll);
        frame1.setVisible(true);
        frame1.setSize(400,300);
    }

    public static void main(String args[])
    {
        SearchResult sr = new SearchResult();
                sr.createUI();              
    }
}

发生选择更改的原因有很多,例如通过鼠标、键盘或编程

最好的选择可能是将
ListSelectionListener
添加到表选择模型中,并在其中进行更改。例如

table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
    public void valueChanged(ListSelectionEvent e) {
        int row = table.getSelectedRow();
        if (row != -1) {
            int modelRow = table.convertRowIndexToModel(row);
            Vector data = (Vector)((DefaultTableModel) table.getModel()).getDataVector().get(modelRow);
        }
    }
});
当选择更改时,将获取指定行的列数据

看一看哪一个提供了额外的例子

使用工作示例更新

因为我无法访问您的数据库,所以我将这个简单的示例放在一起,演示了基本思想

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.util.Vector;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;

public class TestTable {

    public static void main(String[] args) {
        new TestTable();
    }

    public TestTable() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
                }

                DefaultTableModel model = new DefaultTableModel();

                final JTextField rollField = new JTextField(10);
                final JTextField nameField = new JTextField(10);
                final JTextField classField = new JTextField(10);
                final JTextField sectionField = new JTextField(10);

                JPanel details = new JPanel(new GridLayout(1, 4));
                details.add(rollField);
                details.add(nameField);
                details.add(classField);
                details.add(sectionField);

                model.setColumnIdentifiers(new String[]{"Roll No", "Name", "Class", "Section"});
                model.addRow(new String[]{"1", "Happy", "Warrior", "Inner"});
                model.addRow(new String[]{"2", "Sad", "Mage", "Outter"});
                model.addRow(new String[]{"3", "Jug Head", "Clown", "Outter space"});

                final JTable table = new JTable(model);
                table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
                    @Override
                    public void valueChanged(ListSelectionEvent e) {
                        int row = table.getSelectedRow();
                        System.out.println("Selecte table row = " + row);
                        if (row != -1) {
                            int modelRow = table.convertRowIndexToModel(row);
                            System.out.println("Selecte model row = " + row);
                            Vector data = (Vector) ((DefaultTableModel) table.getModel()).getDataVector().get(modelRow);
                            rollField.setText(data.get(0).toString());
                            nameField.setText(data.get(1).toString());
                            classField.setText(data.get(2).toString());
                            sectionField.setText(data.get(3).toString());
                        }
                    }
                });

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(details, BorderLayout.NORTH);
                frame.add(new JScrollPane(table));
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            }
        });
    }

}

更新为覆盖示例
isCellEditable

DefaultTableModel model = new DefaultTableModel() {
    @Override
    public boolean isCellEditable(int row, int column) {
        return false;
    }                    
};
更新了双击表格时关闭窗口的示例

table.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() == 2) {
            if (table.getSelectedRow() != -1) {
                SwingUtilities.getWindowAncestor(table).dispose();
            }
        }
    }
});

但是我该怎么做?你能帮我吗?试试这个代码,我知道它不是你想要的。但是做了你所期望的大部分事情。谢谢你的代码。它被选中了,但它不会在选中时填充文本字段。从DB部分获取值被注释,代码在post中被修改。选中与我相同的代码,它将填充名称文本字段中选定行的值。
TableModelListener
与模型中的更改(如添加、删除或编辑行)相关,而与视图状态中的更改(如选择)无关。您的示例将只提供关于一行的信息,因为
从未更新过……但是,数据库是如何进入到图中的呢?为什么?你已经把所有的值都加载到表中了,是吗?好的,我现在明白你的意思了。你能把它应用到我的代码中吗?因为我有很多错误。这会很有帮助。这会教我直接键入它。将新代码应用到
table=new JTable()之后的某处在您将其添加到容器之前…非常感谢。最后一个查询是如何禁用Jtable中的字段,以及选择后如何自动关闭Jtable窗口?