在运行时从创建的JTextfield获取值

时间:2013-06-14 08:55:30

标签: java swing runtime jlabel jtextfield

我已经创建了一个应用程序,它将获取数据库的列名,并根据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());
        }

2 个答案:

答案 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”代码以获取最简单的解决方案。