我有一个带表的框架,combobox,我想用combobox从数据库填充表,但如果我使用itemlistener,我看不到表,没有itemlistener和String sql="select * from Arlista"
,我看到我的表有数据(combob=combobox)
combob.addItemListener(new ItemListener(){
@Override
public void itemStateChanged(ItemEvent e){
tesztvalt=(combob.getSelectedItem()).toString();
if (e.getItem().equals(tesztvalt))
{
try {
Class.forName( driver );
Connection connection = DriverManager.getConnection( url );
String sql="select * from "+tesztvalt+"";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery( sql );
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
while (rs.next()) {
Vector row = new Vector(columns);
for (int i = 1; i <= columns; i++)
{
row.addElement( rs.getObject(i) );
}
data.addElement( row );
}
rs.close();
stmt.close();
connection.close();
}catch(Exception ex) {
System.out.println( e );
}
JTable table = new JTable(data, columnNames)
{
public Class getColumnClass(int column)
{
for (int row = 0; row < getRowCount(); row++)
{
Object o = getValueAt(row, column);
if (o != null)
{
return o.getClass();
}
}
return Object.class;
}
};
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
JPanel buttonPanel = new JPanel();
getContentPane().add( buttonPanel, BorderLayout.SOUTH );
}
}
});
3条答案
按热度按时间v8wbuo2f1#
这是一个稍微不同的方法,但它很简单。当您从组合框中选择一个项目时,表格会发生更改。它使用一个表模型:
0x6upsns2#
你有几个问题:
1.您错误地使用了
PreparedStatement
。您的代码可能可以工作(我不确定),但它没有利用PreparedStatement
的特性。1.从ResultSet读取数据的代码没有意义,因为您甚至没有从ResultSet阅读任何数据。
要使用PreparedStatement,代码如下:
现在,PreparedStatement将使用适当的分隔符构建SQL查询,因此您不必担心这个问题。
阅读JCBC教程中关于Using Prepared Statements的部分以了解更多信息。
如果你想从一个特定的表中读取所有的数据,那么可以查看Table From Database中的
TableFromDatabaseExample.java
代码。它说明了如何构建查询以及如何访问列名和数据。50pmv0ei3#
我认为最好和最常见的方法是将所有数据都放在JTable中,并使用基于组合框选择的过滤器。
在这个问题中,有人基于文本框完成了此操作。换一个组合很简单。
How can I filter rows in a JTable?
或者查看http://docs.oracle.com/javase/tutorial/uiswing/components/table.html并选择“排序和过滤”