在 JTable 上显示特定用户的数据

Posted

技术标签:

【中文标题】在 JTable 上显示特定用户的数据【英文标题】:Displaying data of particular user on to JTable 【发布时间】:2013-06-25 02:05:48 【问题描述】:

我想使用 JTable 在 java 页面上显示特定的客户详细信息 当我输入客户 ID 然后按下然后我希望客户的所有详细信息在同一个窗口或另一个窗口上?

怎么做?我尝试使用以下代码但失败了。

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

public abstract class Bill extends JFrame implements ActionListener

JTextField textFieldId; 
JLabel l1;
JLabel l2;  
    JButton b2;
Container c = getContentPane();
    ResultSet rs1 = null;        
    DefaultTableModel dtm = new DefaultTableModel();

Bill()

    super("Shree Datta Digambar");
    setBounds(140,250,777,555);
    c.setLayout(null);
    textFieldId = new JTextField();
    l1 = new JLabel("New Customer Entry :-");
    l2 = new JLabel("Customer Id");
    l1.setBounds(10,10,340,20);
    l2.setBounds(10,20,140,70);     
    textFieldId.setBounds(10,70,70,20);             
    b2 = new JButton("Ok");     
    b2.setBounds(10,160,50,20);         
    c.add(b2);
    c.add(l1);
    c.add(l2);
    c.add(textFieldId);                
            setVisible(true);
    setDefaultCloseOperation(EXIT_ON_CLOSE);                
            b2.addActionListener(this);

    public static void main(String[] args) 
    
        Bill bc=new Bill() ;
    
     public void actionPerformed(ActionEvent e)
        

            System.out.println("You clicked the button");                
            if(e.getSource()==b2)
            
                try 
                
                    Connection con;
            try 
                Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
             catch (ClassNotFoundException ex) 
                Logger.getLogger(Bill.class.getName()).log(Level.SEVERE, null, ex);
            
          con =DriverManager.getConnection("jdbc:odbc:devendra");                      
                    java.sql.Statement st = con.createStatement();
                    PreparedStatement ps = con.prepareStatement(null);
                    ps=con.prepareStatement("SELECT FROM Customer 
                                          where Customer_Id = ?");
                    rs1 = ps.executeQuery();
                    while(rs1.next())
                    
                        dtm.addRow(new Object[]
             rs1.getString(1),rs1.getString(2),rs1.getInt(3),rs1.getString(4) );
                    
                JOptionPane.showMessageDialog(null,"You successfully Enter the Entry");
                
            catch (SQLException s) 
                    
                        System.out.println("SQL code does not execute.");
              JOptionPane.showMessageDialog(null,"Please Enter the Detail Correctly");
                            
            
        

【问题讨论】:

" i tried using following code but fail so any body can help me out from these error then please help me ..." -- 什么错误?哪条线? 1) 请在句首加一个大写字母。还要为单词 I 使用大写字母,以及 JEE 或 WAR 等缩写词和首字母缩略词。这使人们更容易理解和帮助。 2) 请对代码、输入/输出和结构化文档(如 html 或 XML)使用代码格式。为此,请选择示例并单击消息发布/编辑表单上方的 按钮。 3)不要设置***容器的大小。而是布局内容并致电pack() 4) Java GUI 可能必须在多个平台、不同的屏幕分辨率和使用不同的 PLAF 上工作。因此,它们不利于组件的精确放置。要为强大的 GUI 组织组件,请改用布局管理器或它们的组合,以及用于空白空间的布局填充和边框。 为什么不使用 WindowBuilder 来更轻松地设计您的 UI? 【参考方案1】:

我认为有很多事情对你没有帮助。

    Billabstract。没有理由是abstract。 没有JTable。这实际上非常令人惊讶,因为您有一个实际的TableModel 您正在使用null 布局。这对你没有帮助。 您正在从JFrame 扩展。这不是一个好主意,因为它会立即阻止您以其他形式重复使用此类。 您的查询没有将任何值绑定到可变参数。 您的异常处理还有一些不足之处...

更好的方法可能看起来像......

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
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.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) 
                

                JFrame frame = new JFrame("Testing");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setLayout(new BorderLayout());
                frame.add(new Bill());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);
            
        );
    

    public class Bill extends JPanel implements ActionListener 

        JTextField textFieldId;
        JLabel l1;
        JLabel l2;
        JButton b2;
        ResultSet rs1 = null;
        DefaultTableModel dtm = new DefaultTableModel();

        public Bill() 
            setLayout(new BorderLayout());

            JPanel fields = new JPanel();

            textFieldId = new JTextField(10);
            l1 = new JLabel("New Customer Entry :-");
            l2 = new JLabel("Customer Id");
            b2 = new JButton("Ok");

            fields.add(l2);
            fields.add(textFieldId);
            fields.add(b2);

            add(fields, BorderLayout.NORTH);

            b2.addActionListener(this);

            // Don't forget to add a table.
            add(new JScrollPane(new JTable(dtm)));

        

        public void actionPerformed(ActionEvent e) 

            System.out.println("You clicked the button");
            if (e.getSource() == b2) 
                PreparedStatement ps = null;
                try 
                    Connection con;
                    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                    con = DriverManager.getConnection("jdbc:odbc:devendra");
                    ps = con.prepareStatement("SELECT FROM Customer where Customer_Id = ?");
                    // You must bind the parameter with a value...
                    ps.setString(1, textFieldId.getText());
                    rs1 = ps.executeQuery();
                    while (rs1.next()) 
                        dtm.addRow(new Object[]
                            rs1.getString(1), rs1.getString(2), rs1.getInt(3), rs1.getString(4));
                    
                    JOptionPane.showMessageDialog(null, "You successfully Enter the Entry");
                 catch (SQLException s) 
                    System.out.println("SQL code does not execute.");
                    s.printStackTrace();
                    JOptionPane.showMessageDialog(null, "Please Enter the Detail Correctly");
                 catch (Exception exp) 
                    exp.printStackTrace();
                    JOptionPane.showMessageDialog(this, "Failed to perform query: " + exp.getMessage());
                 finally 

                    try 
                        ps.close();
                     catch (Exception ex) 
                    

                
            
        
    

我想你可能想多花点时间阅读...

Creating a UI with Swing How to use tables JDBC Database Access

【讨论】:

我会听从你的指示> 再次感谢。上帝保佑你...:) :) 它让我正确输入详细信息,错误为什么会这样.. 我想以表格格式在屏幕上显示该特定客户的详细信息???抱歉,这是我正在做的第一个重大项目,所以请帮帮我...... 这不是例外,这就是信息。在显示消息的try-catch 块中,您需要打印/记录异常。根据您的示例,这可能看起来像 s.printStackTrace() 正如你告诉我的“//您必须将参数绑定到一个值...”这些评论我在代码中进行了这些更改,而不是这些“ps.setString(1, textFieldId.getText() );"我改为“ps.setInt(1,Integer.parseInt(textFieldId.getText()));”这些可能吗? 当我输入正确的客户 ID 时,我得到了这些错误,因为“正确输入详细信息?

以上是关于在 JTable 上显示特定用户的数据的主要内容,如果未能解决你的问题,请参考以下文章

“突出显示” JTable 中的特定行

从JTable获取对象

在旁边的另一个 JTable 上继续 JTable 数据而不是滚动

如何将选择列添加到显示搜索结果的 JTable

使用特定列对 Jtable 项目进行排序 - JAVA

如何通过SQL将一列JCheckBox添加到JTable? [重复]