Java 如何从jTextField获取数据并将其添加回数组?

Java 如何从jTextField获取数据并将其添加回数组?,java,swing,user-interface,arraylist,jtextfield,Java,Swing,User Interface,Arraylist,Jtextfield,我想从jTextField中获取一个值并将其添加回数组。它不需要永久存储。我从这个数组中读取硬编码数据,并将其输出到jList和jTextFields。如果我想编辑并保存这些数据,我会怎么做?我没有这方面的任何代码,因为我不知道从哪里开始。我在网上搜索了无数次,但没有发现任何有意义的东西。任何帮助都将不胜感激!谢谢 更新!!用密码 我所有的ArrayList,都是在main类中创建的 public static ArrayList<Vol_Observer> volObserver

我想从jTextField中获取一个值并将其添加回数组。它不需要永久存储。我从这个数组中读取硬编码数据,并将其输出到jList和jTextFields。如果我想编辑并保存这些数据,我会怎么做?我没有这方面的任何代码,因为我不知道从哪里开始。我在网上搜索了无数次,但没有发现任何有意义的东西。任何帮助都将不胜感激!谢谢

更新!!用密码

我所有的ArrayList,都是在main类中创建的

public static ArrayList<Vol_Observer> volObserver = new ArrayList<>();
public static ArrayList<Pro_Observer> proObserver = new ArrayList<>();
public static ArrayList<Animal> animalDetails = new ArrayList<>();
public static ArrayList<String> watchList = new ArrayList<>();
类的扩展,该类具有某些其他详细信息

public class Pro_Observer extends Observers
{
public String startDate;
public String endDate;
public String Salary;
public String numObservations;

public Pro_Observer(String firstName, String surname, String hNum, String streetName, String city, String county, String postcode, String email, String telNum, String startDate, String endDate, String Salary, String numObservations) 
{
    super(firstName, surname, hNum, streetName, city, county, postcode, email, telNum);
    this.startDate = startDate;
    this.endDate = endDate;
    this.Salary = Salary;
    this.numObservations = numObservations;
}

public String getStartDate() {
    return startDate;
}

public String getEndDate() {
    return endDate;
}

public String getSalary() {
    return Salary;
}

public String getNumObservations() {
    return numObservations;
}

public void setStartDate(String startDate) {
    this.startDate = startDate;
}

public void setEndDate(String endDate) {
    this.endDate = endDate;
}

public void setSalary(String Salary) {
    this.Salary = Salary;
}

public void setNumObservations(String numObservations) {
    this.numObservations = numObservations;
}
}
这就是方法,所以当我点击这个按钮时,应用程序应该将在jTextField中输入的数据保存到ArrayList中。我有一个jRadioButton来选择一些东西,这是必需的,所以除非它不能工作,否则请忽略这段代码

private void addSavejButtonMouseClicked(java.awt.event.MouseEvent evt) {                                            

    if(addVoljRadioButton.isSelected())
    {
        BWA.volObserver.add(addFirstNamejTextField.getText());
    }
}

我仍然不太清楚您被困在哪里,但我猜,也许您的问题是无法在按钮处理程序中构造感兴趣的对象。如果是这样的话,我会尽力提供一个答案。如果情况并非如此,那么请按照我们的要求,提供更清晰的信息和更多的代码。此外,在发布代码时,尝试通过删除与您的问题无关的额外内容来简化代码。例如,为这个问题创建一个新的Observators类,它只有2个或3个字段,因为字段的整个补充是不必要的。并提供了一些GUI代码。您正在发布一些代码,但还不足以让我们清楚地了解正在发生的事情

例如,下面是一个SimpleObserver:

class SimpleObserver {
   private String firstName;
   private String surName;
   private String hNum;

   public SimpleObserver(String firstName, String surName, String hNum) {
      this.firstName = firstName;
      this.surName = surName;
      this.hNum = hNum;
   }

   public String getFirstName() {
      return firstName;
   }

   public String getSurname() {
      return surName;
   }

   public String gethNum() {
      return hNum;
   }

}
请注意,字段应该是私有的,而不是公共的,因为Java OOPs编程的主要好处之一是,它允许您限制类之间可能的连接,从而有助于部分降低程序的复杂性,而数据隐藏是实现这一点的一种方法

对这个类的直接改进包括给它一个equals和一个hashCode方法

接下来是一个简单的GUI,用于显示输入字段和JList:

class SimpleGui extends JPanel {
   public static final int COLS = 8;
   private DefaultListModel<SimpleObserver> simpleObsListModel = new DefaultListModel<>();
   private JList<SimpleObserver> simpleObsList = new JList<>(simpleObsListModel);
   private JTextField firstNameField = new JTextField(COLS);
   private JTextField surNameField = new JTextField(COLS);
   private JTextField hNumField = new JTextField(COLS);

   public SimpleGui() {
      simpleObsList.setVisibleRowCount(8);
      simpleObsList.setCellRenderer(new SimpleObsListRenderer());
      simpleObsList.setPrototypeCellValue(new SimpleObserver("Big First Name", "Big Last Name", ""));

      // very simple GUI layout
      add(new JLabel("First Name:"));
      add(firstNameField);
      add(new JLabel("Last Name:"));
      add(surNameField);
      add(new JLabel("House Number:"));
      add(hNumField);

      JScrollPane scrollPane = new JScrollPane(simpleObsList);
      scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

      add(new JButton(new SubmitAction()));
      add(scrollPane);

   }

   private class SubmitAction extends AbstractAction {
      public SubmitAction() {
         super("Submit");
         putValue(MNEMONIC_KEY, KeyEvent.VK_S);
      }

      public void actionPerformed(java.awt.event.ActionEvent e) {
         // gather data from your fields
         String firstName = firstNameField.getText();
         String surName = surNameField.getText();
         String hNum = hNumField.getText();

         // create your SimpleObserver object here
         SimpleObserver simpleObserver = new SimpleObserver(firstName, surName, hNum);

         // add to JList's model
         simpleObsListModel.addElement(simpleObserver);
      };
   }
}

class SimpleObsListRenderer extends DefaultListCellRenderer {
   @Override
   public Component getListCellRendererComponent(JList<?> list, Object value,
         int index, boolean isSelected, boolean cellHasFocus) {
      if (value == null) {
         value = "";
      } else {
         SimpleObserver simpleObserver = (SimpleObserver)value;
         String surName = simpleObserver.getSurname();
         String firstName = simpleObserver.getFirstName();
         String display = String.format("%s, %s", surName, firstName);
         value = display;
      }
      return super.getListCellRendererComponent(list, value, index, isSelected,
            cellHasFocus);
   }
}
关于您的代码——您似乎大量使用静态字段,我建议您不要这样做,以便您的程序符合OOP原则,再次降低复杂性,使调试和增强变得更容易


请注意,我没有包括ArrayList,因为我仍然不知道您的需求涉及到什么。同样,如果这不能回答您的问题,请改进您的问题。请记住我们的观点:除非您告诉我们或向我们展示,否则对于您的需求、您正在尝试做什么或您的代码是什么毫无头绪的人。

您需要展示一些代码、相关代码,如果只是为了使您的问题更具体、您的问题更容易理解的话。来吧,试试看,你的努力不会有什么损失的。至于“不知道从哪里开始”,从你的问题开始,把它分解成几个步骤,然后试着解决每一小步,一步一小步,直到你找到解决方案或遇到障碍。你应该在所谓的“getter”帮助下从
JTextField
中提取文本。对于文本,它是一个名为
getText()
的方法。在浏览javadocs时,请特别注意方法,它们的名称以
get
set
开头——它们是getter和setter。还要注意Java有所谓的“继承”。这意味着可以在类祖先(超类,如
JTextField
JTextComponent
)中定义方法——也可以浏览javadoc中的特殊部分。@HovercraftFullOfEels我已经用其中的代码更新了问题。我有两个类,一个扩展另一个,鼠标按钮甚至点击了处理程序,我希望在这里执行操作。@SuzanCioc我有getter和setter(见上文)。我原以为将文本添加到arraylist会很简单,类似于:
arraylist.add(jTextField.getText())但显然我的程序不想使用该代码工作。我真的被困在如何度过这一关上了。请帮忙,任何人!!
class SimpleGui extends JPanel {
   public static final int COLS = 8;
   private DefaultListModel<SimpleObserver> simpleObsListModel = new DefaultListModel<>();
   private JList<SimpleObserver> simpleObsList = new JList<>(simpleObsListModel);
   private JTextField firstNameField = new JTextField(COLS);
   private JTextField surNameField = new JTextField(COLS);
   private JTextField hNumField = new JTextField(COLS);

   public SimpleGui() {
      simpleObsList.setVisibleRowCount(8);
      simpleObsList.setCellRenderer(new SimpleObsListRenderer());
      simpleObsList.setPrototypeCellValue(new SimpleObserver("Big First Name", "Big Last Name", ""));

      // very simple GUI layout
      add(new JLabel("First Name:"));
      add(firstNameField);
      add(new JLabel("Last Name:"));
      add(surNameField);
      add(new JLabel("House Number:"));
      add(hNumField);

      JScrollPane scrollPane = new JScrollPane(simpleObsList);
      scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

      add(new JButton(new SubmitAction()));
      add(scrollPane);

   }

   private class SubmitAction extends AbstractAction {
      public SubmitAction() {
         super("Submit");
         putValue(MNEMONIC_KEY, KeyEvent.VK_S);
      }

      public void actionPerformed(java.awt.event.ActionEvent e) {
         // gather data from your fields
         String firstName = firstNameField.getText();
         String surName = surNameField.getText();
         String hNum = hNumField.getText();

         // create your SimpleObserver object here
         SimpleObserver simpleObserver = new SimpleObserver(firstName, surName, hNum);

         // add to JList's model
         simpleObsListModel.addElement(simpleObserver);
      };
   }
}

class SimpleObsListRenderer extends DefaultListCellRenderer {
   @Override
   public Component getListCellRendererComponent(JList<?> list, Object value,
         int index, boolean isSelected, boolean cellHasFocus) {
      if (value == null) {
         value = "";
      } else {
         SimpleObserver simpleObserver = (SimpleObserver)value;
         String surName = simpleObserver.getSurname();
         String firstName = simpleObserver.getFirstName();
         String display = String.format("%s, %s", surName, firstName);
         value = display;
      }
      return super.getListCellRendererComponent(list, value, index, isSelected,
            cellHasFocus);
   }
}
import java.awt.Component;
import java.awt.event.KeyEvent;
import javax.swing.*;

public class TestSimpleObserverGui {
   private static void createAndShowGui() {
      SimpleGui mainPanel = new SimpleGui();

      JFrame frame = new JFrame("Test Gui");
      frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
      frame.getContentPane().add(mainPanel);
      frame.pack();
      frame.setLocationByPlatform(true);
      frame.setVisible(true);
   }

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

class SimpleGui extends JPanel {
   public static final int COLS = 8;
   private DefaultListModel<SimpleObserver> simpleObsListModel = new DefaultListModel<>();
   private JList<SimpleObserver> simpleObsList = new JList<>(simpleObsListModel);
   private JTextField firstNameField = new JTextField(COLS);
   private JTextField surNameField = new JTextField(COLS);
   private JTextField hNumField = new JTextField(COLS);

   public SimpleGui() {
      simpleObsList.setVisibleRowCount(8);
      simpleObsList.setCellRenderer(new SimpleObsListRenderer());
      simpleObsList.setPrototypeCellValue(new SimpleObserver("Big First Name", "Big Last Name", ""));

      // very simple GUI layout
      add(new JLabel("First Name:"));
      add(firstNameField);
      add(new JLabel("Last Name:"));
      add(surNameField);
      add(new JLabel("House Number:"));
      add(hNumField);

      JScrollPane scrollPane = new JScrollPane(simpleObsList);
      scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

      add(new JButton(new SubmitAction()));
      add(scrollPane);

   }

   private class SubmitAction extends AbstractAction {
      public SubmitAction() {
         super("Submit");
         putValue(MNEMONIC_KEY, KeyEvent.VK_S);
      }

      public void actionPerformed(java.awt.event.ActionEvent e) {
         // gather data from your fields
         String firstName = firstNameField.getText();
         String surName = surNameField.getText();
         String hNum = hNumField.getText();

         // create your SimpleObserver object here
         SimpleObserver simpleObserver = new SimpleObserver(firstName, surName, hNum);

         // add to JList's model
         simpleObsListModel.addElement(simpleObserver);
      };
   }
}

class SimpleObsListRenderer extends DefaultListCellRenderer {
   @Override
   public Component getListCellRendererComponent(JList<?> list, Object value,
         int index, boolean isSelected, boolean cellHasFocus) {
      if (value == null) {
         value = "";
      } else {
         SimpleObserver simpleObserver = (SimpleObserver)value;
         String surName = simpleObserver.getSurname();
         String firstName = simpleObserver.getFirstName();
         String display = String.format("%s, %s", surName, firstName);
         value = display;
      }
      return super.getListCellRendererComponent(list, value, index, isSelected,
            cellHasFocus);
   }
}


class SimpleObserver {
   private String firstName;
   private String surName;
   private String hNum;

   public SimpleObserver(String firstName, String surName, String hNum) {
      this.firstName = firstName;
      this.surName = surName;
      this.hNum = hNum;
   }

   public String getFirstName() {
      return firstName;
   }

   public String getSurname() {
      return surName;
   }

   public String gethNum() {
      return hNum;
   }

}