java - 单击复选框时使用 JTable 的内容更新数据库

标签 java swing

当我单击相应行的复选框时,我想用 J 表的单元格值更新我的数据库。这是我的代码。我只是J2EE的初学者,所以请详细说明解决方案

/image/XDhgp.jpg

    package Inhospmgmt;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;

import java.awt.Toolkit;
import java.awt.Color;

import javax.swing.JLabel;
import javax.swing.SwingConstants;

import java.awt.Font;
import java.awt.SystemColor;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.ImageIcon;
import javax.swing.JSeparator;
import javax.swing.JPanel;
import javax.swing.RowSorter;
import javax.swing.border.MatteBorder;
import javax.swing.border.SoftBevelBorder;
import javax.swing.border.BevelBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import javax.swing.table.TableRowSorter;
import javax.swing.JCheckBox;

public class investigation extends JFrame implements ActionListener
{

    /**
     * 
     */
    private static final long serialVersionUID = 2930370058483683162L;
    static JFrame fm1=new JFrame();
    int cnt = 0, r=0,c=0;
    String columns[]={"SNO", "INVESTIGATION", "PRICE(Rs.)", "SELECTION"};
    String data[][]=new String[cnt][3];
    private JTextField textField;
    private JTextField textField_1;
    private JTextField textField_2;
    private JTextField textField_3;
    private JTextField textField_4;
    private JTextField textField_5;
    private JTextField textField_6;
    static JTable table=new JTable();
    static JScrollPane jsp1; 
    DefaultTableModel tabModel ;

    investigation()
    {
        fm1.getContentPane().setBackground(Color.WHITE);
        fm1.setTitle("Social Care Hospital/Investigation");
        fm1.setIconImage(Toolkit.getDefaultToolkit().getImage(investigation.class.getResource("/Inhospmgmt/img/icpic.jpg")));
        fm1.getContentPane().setLayout(null);


        JLabel lblInvestigation = new JLabel("Investigations");
        lblInvestigation.setForeground(SystemColor.textHighlight);
        lblInvestigation.setFont(new Font("Times New Roman", Font.BOLD, 30));
        lblInvestigation.setHorizontalAlignment(SwingConstants.CENTER);
        lblInvestigation.setBounds(557, 23, 229, 46);
        fm1.getContentPane().add(lblInvestigation);

        JLabel label = new JLabel("PID No.");
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setForeground(SystemColor.textHighlight);
        label.setFont(new Font("Tahoma", Font.BOLD, 20));
        label.setBounds(10, 83, 79, 28);
        fm1.getContentPane().add(label);

        textField = new JTextField();
        textField.setColumns(10);
        textField.setBackground(Color.WHITE);
        textField.setBounds(114, 78, 114, 33);
        fm1.getContentPane().add(textField);

        JButton button = new JButton("");
        button.setIcon(new ImageIcon(investigation.class.getResource("/Inhospmgmt/img/unnamed.png")));
        button.setFocusPainted(false);
        button.setContentAreaFilled(false);
        button.setBackground(Color.WHITE);
        button.setBounds(227, 78, 33, 33);
        fm1.getContentPane().add(button);

        JLabel label_1 = new JLabel("Patient Name :");
        label_1.setFont(new Font("Times New Roman", Font.PLAIN, 15));
        label_1.setBounds(10, 144, 99, 22);
        fm1.getContentPane().add(label_1);

        textField_1 = new JTextField();
        textField_1.setEnabled(false);
        textField_1.setDisabledTextColor(Color.BLUE);
        textField_1.setColumns(10);
        textField_1.setBounds(137, 145, 226, 22);
        fm1.getContentPane().add(textField_1);

        JLabel label_2 = new JLabel("Patient Age :");
        label_2.setFont(new Font("Times New Roman", Font.PLAIN, 15));
        label_2.setBounds(411, 144, 90, 22);
        fm1.getContentPane().add(label_2);

        textField_2 = new JTextField();
        textField_2.setEnabled(false);
        textField_2.setDisabledTextColor(Color.BLUE);
        textField_2.setColumns(10);
        textField_2.setBounds(499, 145, 79, 22);
        fm1.getContentPane().add(textField_2);

        JLabel lblDepartment = new JLabel("Department :");
        lblDepartment.setFont(new Font("Times New Roman", Font.PLAIN, 15));
        lblDepartment.setBounds(633, 144, 99, 22);
        fm1.getContentPane().add(lblDepartment);

        textField_3 = new JTextField();
        textField_3.setEnabled(false);
        textField_3.setDisabledTextColor(Color.BLUE);
        textField_3.setColumns(10);
        textField_3.setBounds(725, 145, 249, 22);
        fm1.getContentPane().add(textField_3);

        JLabel lblWard = new JLabel("Ward :");
        lblWard.setFont(new Font("Times New Roman", Font.PLAIN, 15));
        lblWard.setBounds(1018, 144, 90, 22);
        fm1.getContentPane().add(lblWard);

        textField_4 = new JTextField();
        textField_4.setEnabled(false);
        textField_4.setDisabledTextColor(Color.BLUE);
        textField_4.setColumns(10);
        textField_4.setBounds(1082, 145, 165, 22);
        fm1.getContentPane().add(textField_4);

        JLabel lblBedNo = new JLabel("Bed No :");
        lblBedNo.setFont(new Font("Times New Roman", Font.PLAIN, 15));
        lblBedNo.setBounds(411, 192, 69, 22);
        fm1.getContentPane().add(lblBedNo);

        textField_5 = new JTextField();
        textField_5.setEnabled(false);
        textField_5.setDisabledTextColor(Color.BLUE);
        textField_5.setColumns(10);
        textField_5.setBounds(499, 193, 79, 22);
        fm1.getContentPane().add(textField_5);

        JLabel lblConsultingDoctor = new JLabel("Consulting Doctor :");
        lblConsultingDoctor.setFont(new Font("Times New Roman", Font.PLAIN, 15));
        lblConsultingDoctor.setBounds(10, 192, 143, 22);
        fm1.getContentPane().add(lblConsultingDoctor);

        textField_6 = new JTextField();
        textField_6.setEnabled(false);
        textField_6.setDisabledTextColor(Color.BLUE);
        textField_6.setColumns(10);
        textField_6.setBounds(138, 193, 226, 22);
        fm1.getContentPane().add(textField_6);


        JSeparator separator = new JSeparator();
        separator.setBounds(0, 243, 1362, 2);
        fm1.getContentPane().add(separator);    

        table = new JTable();
        Connection con = MyConnection.connect();
        try
        {
            String s ="SELECT SNo,INVESTIGATION,PRICE FROM investigation";
            PreparedStatement p =con.prepareStatement(s);
            ResultSet rs = p.executeQuery();
            rs.last();
            cnt = rs.getRow();
            rs.beforeFirst();
            String data[][]=new String[cnt][3];

            while(rs.next())
            {
                data[r][c] = String.valueOf(rs.getInt("SNo")); ++c;
                data[r][c] = rs.getString("INVESTIGATION");++c;
                data[r][c] = String.valueOf(rs.getInt("PRICE")); ++c;


                r=r+1;
                c=0;
            }


             table.setModel(new DefaultTableModel(data,columns) 
             { 
                 public boolean isCellEditable(int row, int column){
                        if(column==0 || column==1 || column==2 )
                        {
                            return false;
                        }
                        return true;
                    }

                 Class[ ] type=new  Class[]{java.lang.String.class , java.lang.String.class ,java.lang.String.class, java.lang.Boolean.class} ;

            public  Class getColumnClass (int columnIndex) 
            { 
                return type [columnIndex] ; 
                    } 

             } ) ;


            setDefaultLookAndFeelDecorated(true);
            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
            table.setBackground(Color.white);
            table.setGridColor(Color.magenta);
            table.getColumnModel().getColumn(0).setPreferredWidth(80);
            table.getColumnModel().getColumn(1).setPreferredWidth(200);
            table.getColumnModel().getColumn(2).setPreferredWidth(100);
            table.getTableHeader().setBackground(Color.pink);
            table.setRowSelectionAllowed(true);
            table.getTableHeader().setFont(new Font("SansSerif",Font.BOLD, 15));

            jsp1 = new JScrollPane(table, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            jsp1.setBackground(Color.white);
            jsp1.setViewportBorder(new MatteBorder(3, 3, 3, 3, (Color) new Color(0, 0, 0)));
            jsp1.getViewport().setBackground(table.getBackground());
            jsp1.setBounds(526, 404, 485, 162);
            fm1.getContentPane().add(jsp1);

            fm1.setVisible(true);
            fm1.setExtendedState(JFrame.MAXIMIZED_BOTH);

        }
        catch(SQLException e)
        {
            e.printStackTrace();
        }
        finally
        {
            try {
                con.close();
                } 
            catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }



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

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub

    }
}

最佳答案

  1. TableModelListener 添加到 JTableTableModel

  2. 当包含复选框的列生成事件时,请确保该值为 Boolean.TRUE。然后生成将数据复制到数据库所需的 SQL。

您可以查看:TableModelListener and multiple column validation有关使用 TableModelListener 的工作示例。

关于java - 单击复选框时使用 JTable 的内容更新数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36203857/

相关文章:

java - 为什么 HttpUrlConnection 需要 getInputStream 来发送请求?

java - 在 Android 中给定电话号码获取联系人姓名

java - 关闭可运行的 JOptionPane

java - GUI 中的线程 (Swing) - 应用程序解冻

用于图表的 JAVA 库 - JFreeChart?

java - Maven - 从 x 管理的版本,因重复而省略?

java - Java单数据库线程如何实现

java - 如何在多个 jpanel 中使用一个变量?

JAVA 如何在swing 中将JAVAFX 的标签嵌入到JPanel 中?

java - 在没有main方法的情况下,paint方法如何运行?