- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我删除了我的其他帖子,因为有人告诉我它不具体,然后回来提出更具体的问题,这里是......
该程序应该接收联系信息(名字和姓氏、电话、电子邮件),然后您单击添加按钮,将创建一个联系人对象并转到 ArrayList。然后,当单击查看按钮时,您将看到添加到其中的所有联系人。
我一直在观看有关如何使用 GUI 的教程和阅读书籍,并且能够创建一个包含所有必要内容的窗口来添加联系信息。
我的问题:我遇到的问题是如何将此信息添加到数组列表
在弄清楚如何添加信息后,我将研究如何在单击查看按钮时查看它。
任何帮助我前进的帮助或提示都将不胜感激!
public class InputForm extends JFrame {
private static JPanel panel;
private static JLabel firstNameLabel;
private static JLabel lastNameLabel;
private static JLabel phoneNumLabel;
private static JLabel emailLabel;
private static JLabel contactMessage;
private static JTextField firstNameInput;
private static JTextField lastNameInput;
private static JTextField phoneInput;
private static JTextField emailInput;
private static JButton addButton;
private static JButton viewButton;
private String fn;
private String ln;
private String ph;
private String em;
private List<String> list = new ArrayList<String>();
public InputForm() {
int windowWidth = 650;
int windowHeight = 550;
//Window title
setTitle("CONTACT FORM");
//Set window size.
setSize(windowWidth, windowHeight);
//Exit on close
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Buld the panel and add it the the JFrame.
buildPanel();
//Add the panel to the frames content pane
add(panel);
//Display the window.
setVisible(true);
}
private void buildPanel() {
panel = new JPanel();
addButton = new JButton("Add Contact");
viewButton = new JButton("View Contacts");
firstNameLabel = new JLabel("First Name");
firstNameInput = new JTextField(10);
lastNameLabel = new JLabel("Last Name: ");
lastNameInput = new JTextField(10);
phoneNumLabel = new JLabel("Phone Number: ");
phoneInput = new JTextField(10);
emailLabel = new JLabel("Email: ");
emailInput = new JTextField(10);
/*Add labels, text fields and buttons to the panel*/
panel.add(firstNameLabel);
panel.add(firstNameInput);
panel.add(lastNameLabel);
panel.add(lastNameInput);
panel.add(phoneNumLabel);
panel.add(phoneInput);
panel.add(emailLabel);
panel.add(emailInput);
panel.add(addButton);
panel.add(viewButton);
theHandler handler = new theHandler();
addButton.addActionListener(handler);
viewButton.addActionListener(handler);
}
private class theHandler implements ActionListener {
public void actionPerformed(ActionEvent event) {
fn = firstNameInput.getText();
ln = lastNameInput.getText();
ph = phoneInput.getText();
em = emailInput.getText();
Contact con = new Contact(fn, ln, ph, em);
if(event.getSource() == addButton) {
list.add(con);
}
else if(event.getSource() == viewButton) {
JOptionPane.showMessageDialog(null,"Contact Info:\n" + con);
}
else if(event.getSource() == viewButton) {
JOptionPane.showMessageDialog(null, con);
}
}
}
public static void main(String[] args) {
new InputForm();
}
}
好的,这是我根据“满载鳗鱼的气垫船”的建议创建的联系人类。
public class Contact {
private String fn;
private String ln;
private String ph;
private String em;
private List<Contact> list = new ArrayList<Contact>();
public Contact(String fn, String ln, String ph, String em) {
this.fn = fn;
this.ln = ln;
this.ph = ph;
this.em = em;
}
public String getFirstName() {
return fn;
}
public void setFirstName(String fn) {
this.fn = fn;
}
public String getLastName() {
return ln;
}
public void setLastName(String ln) {
this.ln = ln;
}
public String getPhone() {
return ph;
}
public void setPhone(String ph) {
this.ph = ph;
}
public String getEmail() {
return fn;
}
public void setEmail(String em) {
this.em = em;
}
public String toString() {
return "First Name: " + getFirstName() + "\n" +
"Last Name: " + getLastName() + "\n" +
"Phone Number: " + getPhone() + "\n" +
"Email: " + getEmail() + "\n";
}
public static void main(String[] args) {
new InputForm();
}
}
最佳答案
建议:
public String toString()
覆盖方法。当您要调试代码时,这会非常很有帮助。List<Contact>
和 ArrayList 一样——它应该是一个 ArrayList<Contact>
.add(...)
方法,仅此而已。附带建议(与您的主要问题无关):
System.out.println(myContact);
在列表中的每个联系人项目上,将打印有用的信息。此外,如果您在 JList 中显示 List,默认情况下会使用 toString 来显示 JList 模型中的每个项目。例如,像这样的东西:
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.util.ArrayList;
import java.util.List;
import javax.swing.*;
@SuppressWarnings("serial")
public class InputForm2 extends JPanel {
private static final int COLS = 10;
private List<ShoppingItem> shoppingList = new ArrayList<>();
private JTextField nameField = new JTextField(COLS);
private JTextField skuField = new JTextField(COLS);
private JTextField priceField = new JTextField(COLS);
public InputForm2() {
JPanel formPanel = new JPanel(new GridBagLayout());
formPanel.add(new JLabel("Item Name:"), createGbc(0, 0));
formPanel.add(nameField, createGbc(1, 0));
formPanel.add(new JLabel("Item SKU:"), createGbc(0, 1));
formPanel.add(skuField, createGbc(1, 1));
formPanel.add(new JLabel("Price:"), createGbc(0, 2));
formPanel.add(priceField, createGbc(1, 2));
JPanel btnPanel = new JPanel(new GridLayout(1, 0, 4, 4));
btnPanel.add(new JButton(new AddItemAction("Add Item")));
btnPanel.add(new JButton(new DisplayItemsAction("Display Items")));
setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
setLayout(new BorderLayout());
add(formPanel, BorderLayout.CENTER);
add(btnPanel, BorderLayout.PAGE_END);
}
private static GridBagConstraints createGbc(int x, int y) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbc.anchor = x == 0 ? GridBagConstraints.WEST : GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.HORIZONTAL;
int inset = 4;
int leftInset = x == 0 ? inset : 3 * inset;
gbc.insets = new Insets(inset, leftInset, inset, inset);
return gbc;
}
private class AddItemAction extends AbstractAction {
public AddItemAction(String name) {
super(name);
int mnemonic = (int) name.charAt(0); // mnemonic keystroke
putValue(MNEMONIC_KEY, mnemonic);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO finish this
// get Strings from fields
// create ShoppingItem object
// add to shoppingList
}
}
private class DisplayItemsAction extends AbstractAction {
public DisplayItemsAction(String name) {
super(name);
int mnemonic = (int) name.charAt(0); // mnemonic keystroke
putValue(MNEMONIC_KEY, mnemonic);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO finish this
}
}
private static void createAndShowGui() {
InputForm2 mainPanel = new InputForm2();
JFrame frame = new JFrame("InputForm2");
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 ShoppingItem {
private String name;
private String skuNumber;
private double price;
public ShoppingItem(String name, String skuNumber, double price) {
this.name = name;
this.skuNumber = skuNumber;
this.price = price;
}
public String getName() {
return name;
}
public String getSkuNumber() {
return skuNumber;
}
public double getPrice() {
return price;
}
@Override
public String toString() {
return String.format("name: %s, sku: %s, price: $%0.df", name, skuNumber, price);
}
}
请注意,这使用了不同的非 GUI 类和 JTextFields,但我希望您获得并借鉴想法,而不是代码。 :)
编辑
关于您更新的问题,您的错误消息告诉您确切出了什么问题。这段代码:
if(event.getSource() == addButton) {
fn = firstNameInput.getText();
ln = lastNameInput.getText();
ph = phoneInput.getText();
em = emailInput.getText();
list.add(fn + "\n" + ln + "\n" + ph + "\n" + em + "\n");
不会将联系人对象添加到列表中,而是尝试将连接的字符串(一个以换行符作为分隔符???)添加到列表中,但此处不允许也不需要字符串。同样按照我上面的建议,您应该使用文本字段中保存的字符串,创建一个联系人对象,然后将该对象添加到您的列表中。
关于java - GUI 将 JTextField 添加到 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32674293/
将一个数组列表分配给另一个数组列表与在两个数组列表之间使用 addAll 方法有什么区别? 1 > arrayList = arrayList;//应该将后面的arrayList的值分配给第一个。 2
所以我在将 ArrayList 添加到我的 ArrayList 时遇到了一些问题。将其想象成一张 table 。 下面是一些示例代码: ArrayList currentRow = new Arra
我一直在尝试转换 ArrayList> to ArrayList> 的字符串 这是我尝试构建的代码。 public void convertString (ArrayList> templist) {
我有一个 ArrayList (alal) 和一个 ArrayList(al) 的 ArrayList。我想将 al 插入 alal,但我希望 alal.get(0) 包含 al 拥有的所有内容以及添
很抱歉标题太长,如果您能想到更好的标题,请告诉我! 我正在做的是尝试创建一个 ArrayList 的 ArrayList 并将 ArrayList 逐个添加到其中。两个AL>我所拥有的称为三角形和正方
我有带有值的 mList2。存在具有相同 id 的值。如何获取具有相同 id 的对象分组的 List 或 ArrayList 并将其添加到 ArrayList>? List mList2 = list
我正在创建一个 ArrayList的 ArrayList并添加 ArrayLists给它。但每次我对 ArrayList 进行更改时, 它反射(reflect)在 ArrayList 中. 示例: L
谁能解释一下ArrayList之间的区别是什么? , ArrayList和 ArrayList是什么时候使用它们?它们在实现层面上是相同的还是各自具有不同的含义? 最佳答案 ArrayList 特别是
这个问题在这里已经有了答案: Java generics: List> = new LinkedList>() is prohibited? (3 个答案) 关闭 9 年前。 为什么这段代码可以编译
我的 arraylistS 在覆盖数组列表中的行为类似于同一个实例。 我用其中一个来操作 i=0; manupulate((ArrayList)theCoveringRootArrayList.get
我们遇到这个错误 java.lang.NullPointerException at java.util.ArrayList.(Unknown Source) at de.mystuf
据我了解,ArrayList 类继承其父“List”类的 equals() 函数来查找两个成员对象是否相同。这是否意味着“contains()”线性搜索(使用“equal”)来查找 ArrayList
这个问题已经有答案了: What is the diamond operator in Java? (2 个回答) 已关闭 7 年前。 正如标题所说,在Java中,这两种语句有什么区别吗? 通常我都能
我正在尝试求解帕斯卡三角形。我有两个用 Java 编写的代码片段,第一个创建 inner ArrayList 几次并且对我来说效果很好。 但是在代码的第二个版本中,如果我修改 inner ArrayL
正如标题所示,我有两个 ArrayList。奇怪的是,在一个数组列表上设置一个值会改变另一个数组列表的值。 一些信息:这些是 Entry 类型的 ArrayList,每个列表都包含一个金额和一个值(这
我已经添加了一个项目到列表 a,然后添加了列表 a 到列表 b 并再次做了同样的事情。 我的问题是,如果我打印 b.get(0) 和 b.get(1),我会得到相同的列表,这两个项目都是 “一”和“二
我正在创建一个 ArrayList of ArrayList of ArrayList 的 ArrayList 并按以下方式填充它。它正确地填充它。我已经通过调试和 println 弄清楚了这一点。但
实现可以在 Arraylist 和 Integer 中存储任何级别的 ArrayList 的 ArrayList 的最佳方法是什么。 List> list = ArrayList(); 仅允许列表中最
在下面的示例中,我将如何将 ArrayList al4 的内容与其他 ArrayList 中的任何一个进行比较?以同样的方式,我将 al1 与 al2 进行了比较。 import java.util.
好的,所以我之前发布了一个线程,它回答了我的很多问题并帮助我改进了我的代码,但是,我遇到了另一个问题,我不知道为什么,但我认为也许该副本只是指向原始对象..(尽管我已尽力避免这种情况) 在我的游戏代码
我是一名优秀的程序员,十分优秀!