Java 使用keylistener在数据库msql中搜索Jtextfield
当我在Java 使用keylistener在数据库msql中搜索Jtextfield,java,mysql,swing,Java,Mysql,Swing,当我在JTextField中的数据库中查找名称时,我希望按enter键显示所有相应的名称。不幸的是我做不到,请有人帮我 public class Rechercher extends JFrame{ private JLabel rechercher; private JTextField trechercher; private JButton executer; private JButton exit; static Connection conn
JTextField
中的数据库中查找名称时,我希望按enter键显示所有相应的名称。不幸的是我做不到,请有人帮我
public class Rechercher extends JFrame{
private JLabel rechercher;
private JTextField trechercher;
private JButton executer;
private JButton exit;
static Connection connection;
Vector titrecolonnes = new Vector();
Vector donnee = new Vector();
private JTable table;
private TableRowSorter<TableModel> sorter;
public Rechercher()
{
initComponents();
}
public void initComponents()
{
setLayout(null);
trechercher = new JTextField("");
add(trechercher);
trechercher.setBounds(140, 30, 235,35);
executer = new JButton("Rechercher :");
add(executer);
executer.setBounds(10, 34, 115,25);
try
{
Class.forName("com.mysql.jdbc.Driver");
System.out.println("com.mysql.jdbc.Driver found");
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/eva","root","");
System.out.println("Connexion Ok");
}catch(Exception cnfe)
{
System.out.println("Error:"+cnfe.getMessage());
}
//-----actionner textfield
trechercher.addMouseListener(new MouseAdapter()
{
public void mousePressed(MouseEvent e){
trechercher.setText("");
}
});
//------Connection à la base de donneés
trechercher.addKeyListener(new KeyAdapter()
{
public void keyPressed(KeyEvent e) {
try{
// Read data from a table
String sql = "SELECT * FROM impaye";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
// Get column names
for (int i = 1; i <= columns; i++)
{
titrecolonnes.addElement( md.getColumnName(i) );
}
// Get row data
while (rs.next())
{
Vector row = new Vector(columns);
for (int i = 1; i <= columns; i++)
{
row.addElement(rs.getObject(i));
}
donnee.addElement(row);
}
rs.close();
stmt.close();
}catch(Exception cnfe)
{
System.out.println("Error:"+cnfe.getMessage());
}
TableModel model = new DefaultTableModel (donnee, titrecolonnes)
{
public Class getColumnClass(int columnNames) {
Class returnValue;
if ((columnNames >= 0) && (columnNames < getColumnCount())) {
returnValue = getValueAt(0, columnNames).getClass();
} else {
returnValue = Object.class;
}
return returnValue;
}
};
table = new JTable (model) ;
sorter = new TableRowSorter<TableModel>(model) ;
JScrollPane scrollPane = new JScrollPane((table));
table.setRowSorter (sorter) ;
getContentPane().setLayout(new GridLayout(1,1));
getContentPane().add(scrollPane);
}
});
}
}
公共类Rechercher扩展JFrame{
私人JLabel rechercher;
私人JTextField trechercher;
专用按钮执行器;
私人按钮出口;
静态连接;
向量titReconnes=新向量();
向量donnee=新向量();
专用JTable表;
私人桌面分拣机;
公共回收商()
{
初始化组件();
}
公共组件()
{
setLayout(空);
trechercher=新的JTextField(“”);
添加(trechercher);
立根数(140,30,235,35);
executer=新的JButton(“Rechercher:”);
添加(执行器);
执行者.挫折(10,34,115,25);
尝试
{
Class.forName(“com.mysql.jdbc.Driver”);
System.out.println(“com.mysql.jdbc.Driver-find”);
connection=DriverManager.getConnection(“jdbc:mysql://localhost:3306/eva“,”根“,”);
System.out.println(“连接正常”);
}捕获(例外cnfe)
{
System.out.println(“错误:+cnfe.getMessage());
}
//-----actionner文本字段
addMouseListener(新的MouseAdapter()
{
公共无效鼠标按下(MouseEvent e){
trechercher.setText(“”);
}
});
//------多内基地的连接
addKeyListener(新的KeyAdapter()
{
按下公共无效键(按键事件e){
试一试{
//从表中读取数据
String sql=“选择*来自impaye”;
语句stmt=connection.createStatement();
结果集rs=stmt.executeQuery(sql);
ResultSetMetaData md=rs.getMetaData();
int columns=md.getColumnCount();
//获取列名
对于(int i=1;i
不要使用KeyListener
JTextField
被设计为与ActionListener
一起使用,以处理回车键
table = new JTable (model) ;
sorter = new TableRowSorter<TableModel>(model) ;
JScrollPane scrollPane = new JScrollPane((table));
table.setRowSorter (sorter) ;
getContentPane().setLayout(new GridLayout(1,1));
getContentPane().add(scrollPane);
然而,一个更简单的解决方案是将空表和滚动窗格添加到类构造函数的框架中。然后,当您获得新数据时,您所需要做的就是刷新表的TableModel
,然后表将重新绘制自身
那么,在刷新方法中需要做的就是:
table.setModel(model );
您好@Recay,欢迎来到StackOverflow!您的问题还不完全清楚。您是否试图根据当前用户输入从数据库中提供搜索建议?
panel.add(...);
panel.revalidate(); // invokes the layout manager
panel.repaint(); // repaints the components
table.setModel(model );