2014-03-05 53 views
0

我每次單擊標籤時都會創建一個JTextField。我的問題是讓文本在創建的文本框內。我如何從JTextField中通過JLabel動態創建的點擊獲取值點擊

這是我的代碼:

public void mouseClicked(MouseEvent arg0) {  
    List<JTextField> mine = new ArrayList<JTextField>(); 
    box = new JTextField(); 
    name = new JTextField(); 
    pnlPanel.add(box); 
    pnlpanel.add(name); 
    lay++; 
    if (lay > 0) { 
     box.setBounds(283, 145, 182, 27); 
     name.setBounds(81, 145, 182, 27); 
     mine.add(box); 
    } 
    GetData mydata = new GetData(); 
    mydata.doGetData(); 
    frame.repaint(); 
} 

這是我獲取用戶輸入的數據代碼,但它不工作:

public class GetData { 
    public void doGetData(List<JTextField> myFields) { 
     for (JTextField txt: myFields) { 
     } 
    } 
} 

如何我得到用戶輸入?

+0

你想從哪裏得到那些JTextFields中的文本,你知道里面沒有值嗎? – Salah

+0

您可以使用'box.getText()'從文本字段獲取值! – ItachiUchiha

+0

是的。因爲場景是這樣的:用戶將點擊一個jLabel,然後創建用戶輸入的文本框。然後在點擊該標籤後,用戶將能夠輸入必要的數據,點擊按鈕後,所有來自創建的文本字段的文本將被放入一個變量,然後我將保存到我的數據庫。 – harraypotter

回答

0

你將不得不以某種方式存儲字段。我更喜歡使用ArrayList,但(如Klemens Morbe所述)有很多方法。

這裏是一個基本的例子,輸出將出現在控制檯中。

import java.awt.Dimension; 
import java.awt.FlowLayout; 
import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 
import java.util.ArrayList; 
import java.util.Collection; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.WindowConstants; 


public class MoreAndMoreTextfields extends JFrame { 

    // the panel, that we will add the visible fields to 
    private JPanel panel = new JPanel(); 

    // a collection of all fields, so that we can access them afterwards 
    private Collection<JTextField> textFields = new ArrayList<JTextField>(); 

    public MoreAndMoreTextfields() { 

     // basic window layout stuff 
     setSize(400, 300); 
     setLayout(new FlowLayout()); 
     setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); 

     setContentPane(panel); 

     // add label, that will create new input fields 
     JLabel addInputLabel = new JLabel("click for more fields"); 
     addInputLabel.addMouseListener(new MouseAdapter() { 

      @Override 
      public void mouseClicked(MouseEvent e) { 
       JTextField textField = new JTextField(); 
       panel.add(textField); 
       textField.setPreferredSize(new Dimension(100,20)); 
       textFields.add(textField); 
       revalidate(); 
      } 
     }); 
     panel.add(addInputLabel); 

     // add new label, that will print out contents 
     JLabel outputLabel = new JLabel("click for contents"); 
     outputLabel.addMouseListener(new MouseAdapter() { 

      @Override 
      public void mouseClicked(MouseEvent e) { 
       System.out.println("Contents of fields:"); 
       for (JTextField textField : textFields) { 
        System.out.println(" input:"+textField.getText()); 
       } 
      } 
     }); 
     panel.add(outputLabel); 
    } 


    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new MoreAndMoreTextfields().setVisible(true); 
      } 
     }); 
    } 
} 
+0

謝謝你,你的驚人! – harraypotter

+0

歡迎你.PS:你應該考慮使用「LayoutManagers」,正如我在 示例中所做的那樣,請參閱http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html – slartidan

0

獲取JTextField文本的使用textfield.getText()
您可以將JTextFields保存到列表List<JTextField>
或遍歷面板組件panel.getComponents()
Aslo你可以給每個JTextField一個這樣的標識textfield.setName("id");

+0

謝謝你的理解。我做了textfield.getText();但它不工作,它不給我任何東西,請看我上面編輯的代碼。 – harraypotter