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