2015-09-12 2 views
0

Привет, Я работаю над новшеством в моей компании для обработки обращений с сервера, поэтому для этого пользователя необходимо добавить имена сервисов в моем приложении, которое используется для мониторинга. Таким образом, я держал кнопку, которая даст JTextFields считать до 9 так, во время кнопки отправки, как буду я получить значения из всех текстовых полей, ниже мой код,Как получить значения из нескольких текстовых полей в java swing

package com.Lawrence; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JTextField; 
public class Sample2 implements ActionListener 
{ 
    JFrame mainFrame; 
    static int count = 0; 
    static int width_textfield = 10; 
    static int height_textfield = 40; 
    static int height = 0; 
    JButton addTextField,submit; 
    JTextField virtualDirectories; 
    JLabel virtualDirectoriesName; 
    ArrayList<String> texts = new ArrayList<String>(); 

    public Sample2() 
    { 
     mainFrame = new JFrame("Add Virtual Directory"); 
     mainFrame.setSize(640,640); 
     mainFrame.setResizable(false); 
     mainFrame.setLayout(null); 

     addTextField = new JButton(); 
     addTextField.setText("Add Virtual directory"); 
     addTextField.setBounds(10, 10, 200, 25); 
     addTextField.addActionListener(this); 
     mainFrame.add(addTextField); 

     submit = new JButton(); 
     submit.setText("Submit"); 
     submit.setBounds(180, 560, 100, 25); 
     submit.addActionListener(this); 
     mainFrame.add(submit); 

     mainFrame.setVisible(true); 

     height = mainFrame.getHeight(); 
    } 
    public void actionPerformed(ActionEvent e) 
    { 
     if(e.getActionCommand()== "Add Virtual directory") 
     { 
      if(height_textfield <= height-80) 
      { 
       virtualDirectoriesName = new JLabel("Virtual Directory"+"\t"+":"); 
       virtualDirectoriesName.setBounds(10,height_textfield,200, 25); 
       mainFrame.add(virtualDirectoriesName); 

       virtualDirectories = new JTextField(); 
       virtualDirectories.setBounds(150,height_textfield,200,25); 
       mainFrame.add(virtualDirectories); 

       texts.add(virtualDirectories.getText()); 

       count++; 
       //width_textfield++; 
       height_textfield = height_textfield+60; 

       mainFrame.revalidate(); 
       mainFrame.repaint(); 

       //http://www.dreamincode.net/forums/topic/381446-getting-the-values-from-mutiple-textfields-in-java-swing/ 
      } 
      else 
      { 
       JOptionPane.showMessageDialog(mainFrame, "can only add"+count+"virtual Directories"); 
      } 
     } 
     if(e.getActionCommand() == "Submit") 
     { 
      ArrayList<String> texts = new ArrayList<String>(); 
      for(int i = 0; i< count;i++) 
      { 
       texts.add(virtualDirectories.getText()); 
      } 

      System.out.println(texts.size()); 
      System.out.println(texts.toString()); 
     } 
    } 
} 

Поэтому мне нужно, чтобы получить значения из эти текстовые поля и добавьте их в arraylist, а затем обработайте его, чтобы войти в мой сервер для разбора файлов журнала. Поэтому, пожалуйста, объясните мне, как это сделать.

+3

* «Пожалуйста, объясните мне, как это сделать» * Что вы пробовали? Где вы застряли? SO - это не сайт для поиска преподавателей, поэтому не ожидайте, что кто-то предложит. 'mainFrame.setLayout (null);' Java GUIs должны работать в разных ОС, размер экрана, разрешение экрана и т. д., используя разные PLAF в разных локалях. Таким образом, они не способствуют идеальной компоновке пикселей. Вместо этого используйте диспетчеры макетов или [их комбинации] (http://stackoverflow.com/a/5630271/418556), а также макет и границы для [пробела] (http://stackoverflow.com/a/17874718/ 418556). –

ответ

1

Вы можете хранить каждое текстовое поле в arraylist, как и с помощью тексты. Также, пожалуйста, посмотрите, как использовать layout managers.

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


fields.add(virtualDirectories); 


for (int i = 0; i < count; i++) { 
    texts.add(fields.get(i).getText()); 
} 

Edit:

Это версия ваш код с помощью менеджеров компоновки. (плюс линии выше, конечно)

import java.awt.BorderLayout; 
import java.awt.FlowLayout; 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.ArrayList; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 

public class Sample2 implements ActionListener { 
    JFrame mainFrame; 

    JPanel bottom; 
    JPanel center; 
    JPanel centerPanel1; 
    JPanel centerPanel2; 

    static int count = 0; 
    static int width_textfield = 10; 
    static int height_textfield = 40; 
    static int height = 0; 

    JButton addTextField, submit; 
    JTextField virtualDirectories; 
    JLabel virtualDirectoriesName; 

    ArrayList<JTextField> fields = new ArrayList<JTextField>(); 
    ArrayList<String> texts = new ArrayList<String>(); 

    int maxFields = 10; 

    public Sample2() { 
     mainFrame = new JFrame("Add Virtual Directory"); 
     mainFrame.setSize(640, 640); 
     mainFrame.setResizable(false); 

     addTextField = new JButton(); 
     addTextField.setText("Add Virtual directory"); 
     addTextField.setBounds(10, 10, 200, 25); 
     addTextField.addActionListener(this); 

     submit = new JButton(); 
     submit.setText("Submit"); 
     submit.setBounds(180, 560, 100, 25); 
     submit.addActionListener(this); 

     center = new JPanel(new GridLayout(1, 2)); 

     centerPanel1 = new JPanel(new GridLayout(maxFields, 1, 0, 20)); 
     centerPanel2 = new JPanel(); 

     center.add(centerPanel1); 
     center.add(centerPanel2); 

     bottom = new JPanel(new FlowLayout()); 
     bottom.add(addTextField); 
     bottom.add(submit); 

     mainFrame.getContentPane().add(bottom, BorderLayout.SOUTH); 
     mainFrame.getContentPane().add(center, BorderLayout.CENTER); 
     mainFrame.setVisible(true); 

    } 

    public void actionPerformed(ActionEvent e) { 
     if (e.getActionCommand() == "Add Virtual directory") { 

      if (count < maxFields) { 

       JPanel p = new JPanel(new GridLayout(1, 2)); 

       virtualDirectoriesName = new JLabel("Virtual Directory" + "\t" + ":"); 
       virtualDirectories = new JTextField(); 

       p.add(virtualDirectoriesName); 
       p.add(virtualDirectories); 

       centerPanel1.add(p); 

       texts.add(virtualDirectories.getText()); 
       fields.add(virtualDirectories); 

       count++; 
       // width_textfield++; 
       height_textfield = height_textfield + 60; 

       mainFrame.revalidate(); 
       mainFrame.repaint(); 

       // http://www.dreamincode.net/forums/topic/381446-getting-the-values-from-mutiple-textfields-in-java-swing/ 
      } else { 
       JOptionPane.showMessageDialog(mainFrame, "can only add " + maxFields + " virtual Directories"); 
      } 

     } 
     if (e.getActionCommand() == "Submit") { 
      ArrayList<String> texts = new ArrayList<String>(); 
      for (int i = 0; i < count; i++) { 
       texts.add(fields.get(i).getText()); 
      } 

      System.out.println(texts.size()); 
      System.out.println(texts.toString()); 
     } 
    } 

    public static void main(String[] args) { 
     new Sample2(); 
    } 

} 
+0

Спасибо LuxxMiner, это сработало :) – user1791442

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