我已经创建了一个应用程序,它将获取数据库的列名,并根据db的列名在运行时创建jlabel和jtextfield。
这是代码片段:我在这里使用Netbeans ......
public void getColumn(){
String sql = "SELECT * from user";
jPanel.setLayout(new GridLayout(0,2));
try {
pst = conn.prepareStatement(sql);
rs = pst.executeQuery();
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
ArrayList<String> columns= new ArrayList<String>();
for(int i = 1; i<= columnCount; i++){
columns.add(rsmd.getColumnName(i));
System.out.println(String.valueOf(columns));
}
ArrayList<JTextField> fields = new ArrayList<JTextField>();
for(int i = 0; i <columns.size();i++){
JLabel jl = new JLabel(String.valueOf(columns.get(i)));
jPanel.add(jl);
JTextField f = new JTextField(50);
fields.add(f);
jPanel.add(f);
this.revalidate();
this.repaint();
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, e.getMessage());
}
}
这将是样本输出。
id | ______________
fName | _____________
mName | _______________
lName | ________________
引用JTextFields的行..
但是,我无法获取在jtextfields中输入的值。我尝试过使用下面的代码。但没有运气。任何帮助表示赞赏。
for(JTextField field : fields){
JOptionPane.showMessageDialog(null, field.getText());
}
答案 0 :(得分:0)
可能你可以试试这个:
Component children[] = jp.getComponents();
for(Component child : children) {
if(child instanceof JTextField) [
JOptionPane.showMessageDialog(null, ((JTextField)child).getText());
}
}
答案 1 :(得分:0)
更好的解决方案是使用JTable。有关详细信息,请阅读How to Use Tables上的Swing教程中的部分。
您还可以查看Table From Database以获取一些简单的代码,以帮助您入门。请参阅“TableFromDatabaseExample”代码以获取最简单的解决方案。