2015-01-16 4 views
0

Прежде всего, я новичок в java. Я хотел бы генерировать формы динамически на основе массивов, я смог генерировать поля, но я не знаю, как их читать, я не мог найти что-то вроде индекса текстового поля или чего-то еще. Так что в основном я спрашиваю, как читать значения из компонента TextField, который не имеет ссылки. JTextField myText = new JTextField() vs new JTextField(), добавленный в панель Ниже приведен простой пример кода, любая идея приветствуется.Создание динамической формы из вектора или массива

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Test extends JFrame{ 
    private JPanel p1 = new JPanel(); 
    private JButton btn = new JButton("Read Data"); 

    public Test(){ 
     super("Dynamic Form"); 
     setLayout(new GridLayout(4,2)); 
     setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

     // Declare the Array with fields 
     String[] fList = new String[3]; 
     fList[0] = "id"; 
     fList[1] = "firstName"; 
     fList[2] = "lastName"; 

     //Iterate fields array and add elements 
     for(int i = 0; i<fList.length; i++){ 
      add(new JLabel(fList[i])); 
      add(new JTextField("field: "+fList[i])); 
     } 

     add(p1); 
     add(btn); 

     btn.addActionListener(
      new ActionListener(){ 
       @Override 
       public void actionPerformed(ActionEvent ev){ 
        String id = "id field value is: "; // + some code to get actual text field value 
        String firstName = "firstName field value is: "; // + some code to get actual text field value 
        String lastName = "lastName field value is: "; // + some code to get actual text field value 

        System.out.println(id+ " " + firstName + " " + lastName); 
       } 
      } 
     ); 

     pack(); 
     setLocationRelativeTo(null); 
     setResizable(true); 
     setVisible(true); 
    } 

    public static void main(String [] args){ 
     new Test(); 
    } 
} 
+0

Вы де понимают, что хотя векторы и массивы могут каждый трюм коллекцию объектов, они это совершенно разные структуры данных, не так ли? Я спрашиваю, потому что название упомянутых векторов, но тело только массивы. –

+0

На самом деле, в конце концов, я буду использовать ArrayList объектов, но для самого вопроса я попытался сохранить его простым. Обратная связь приветствуется в любом случае. – Cristian

ответ

1

Необходимо где-то хранить ссылки на эти текстовые поля.

List<JTextField> fields = new ArrayList<>(); 

...

for(int i = 0; i<fList.length; i++){ 
     JTextField field= new JTextField("field: "+fList[i]); 
     add(new JLabel(fList[i])); 
     add(field); 
     fields.add(field); 
} 

Теперь вы можете получить доступ к ним из списка полей:

public void actionPerformed(ActionEvent ev){ 
    String id = "id field value is: " + fields.get(0).getText(); 
    String firstName = "firstName field value is: " + fields.get(1).getText(); 
    String lastName = "lastName field value is: " + fields.get(2).getText(); 

    System.out.println(id+ " " + firstName + " " + lastName); 
} 
+0

Теперь это идеальное чувство. Благодарю. – Cristian

Смежные вопросы