gpt4 book ai didi

java - ActionListener 中的 ArrayList 不工作

转载 作者:行者123 更新时间:2023-11-30 10:22:06 25 4
gpt4 key购买 nike

我制作了一个名为 DoctorsCare 的 java 程序,患者可以在其中预约医生。因此,在预约面板中,我包括了患者 ID、姓名、性别、出生日期、地址和简短的患者病史。

所有这些字符串值将被放入一个数组列表中,并在填写预约表格并单击提交按钮后最终返回到一个新选项卡(医生选项卡)。我写的数组列表代码有一些问题,但我可以运行程序。

我只需要知道我在哪里犯了错误以及如何将数组列表值返回到医生选项卡。

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.Normalizer.Form;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.swing.*;

public class NewPage extends JFrame implements ActionListener{

JFrame frame1= new JFrame();
JTextField id;
JLabel label = new JLabel("Patient ID:");
JLabel label2 = new JLabel("Name:");
JLabel label3 = new JLabel("Gender:");
JLabel label4 = new JLabel("Date of Birth:");
JLabel label5 = new JLabel("Address:");
JLabel label7 = new JLabel("Phone:");
JLabel label6= new JLabel("brief patient history:");
JPanel panel1 = new JPanel();
JTextArea phistry = new JTextArea(11,31);
JTextField text1 = new JTextField(20);
JTextField text2 = new JTextField(20);
JTextField text3 = new JTextField(20);
JTextField text4 = new JTextField(20);
JTextField text5 = new JTextField(20);
JTextField text6 = new JTextField();
JTextField text7 = new JTextField(20);
JButton button = new JButton("SUBMIT");

NewPage()
{
frame1.setTitle("Booking Appointment");
frame1.setVisible(true);
frame1.setSize(330,470);
frame1.add(panel1);
panel1.add(label);

panel1.add(text1);
panel1.add(label2);
panel1.add(text2);
panel1.add(label3);
panel1.add(text3);
panel1.add(label4);
panel1.add(text4);
panel1.add(label5);
panel1.add(text5);
panel1.add(label7);
panel1.add(text7);
panel1.add(label6);
panel1.add(phistry);
panel1.add(button);
button.setPreferredSize(new Dimension(160,40));
button.addActionListener(this);
}



\\the button code
public void actionPerformed(ActionEvent e) {

List<List<String>> model = new ArrayList<List<String>>();

text1.selectAll(); \\selects the input from user
text2.selectAll();
text3.selectAll();
text4.selectAll();
text5.selectAll();
text6.selectAll();
String ID = text1.getSelectedText(); \\initializes ID
String PName = text2.getSelectedText();
String Gender = text3.getSelectedText();
String DoB = text4.getSelectedText();
String Address = text5.getSelectedText();
//String phone = text7.getSelectedText();
String phistry = text6.getSelectedText();

//String phistry = text6.getSelectedText();

List<String> line = Arrays.asList(new String[]{ID, PName, Gender, DoB, Address, phistry});
model.add(line);

StringBuilder sb = new StringBuilder();
sb.append("ID\tFirst\tLast\tCourse\tYear\n");
for(List<String> input : model) {
for (String item : input) {
sb.append(item);
if (input.indexOf(item) == input.size()-1) {
sb.append("\n");
} else {
sb.append("\t");
}
}
}
}
}

最佳答案

首先,您的 List 包含模型信息,但您尚未在下面的 actionPerformed 方法中将其设置在文本区域中,

this.phistry.setText(sb.toString());

假设您在单独的类中有医生选项卡,如下所示(否则您可以直接在 NewFrame 中设置模型,

class DoctorsPanel extends JPanel {

private List<List<String>> model;
JTextArea history;

public DoctorsPanel() {
model = new LinkedList<>();
history = new JTextArea(11, 31);
setLayout(new GridLayout(1, 1));
add(history);
}

public void setModel(List<List<String>> model) {
this.model = model;
setHistory();
}

private void setHistory() {
this.history.setText(getModelData());
}

private String getModelData() {
StringBuilder sb = new StringBuilder();
sb.append("ID\tFirst\tLast\tCourse\tYear\n");
for (List<String> input : model) {
for (String item : input) {
sb.append(item);
if (input.indexOf(item) == input.size() - 1) {
sb.append("\n");
} else {
sb.append("\t");
}
}
}
return sb.toString();
}

}

您可以在 NewFrame 中拥有如下所示的选项卡式 Pane ,

 JTabbedPane jTab = new JTabbedPane();
panel1 = new JPanel();
panel2=new DoctorsPanel();
jTab.add("Book", panel1);
jTab.add("Doctors", panel2);
frame1.add(jTab);

然后你就可以在每次预约的时候设置了。
即当对 tab1 组件执行操作时

public void actionPerformed(ActionEvent e) {     

List<List<String>> model = new ArrayList<List<String>>();

String ID = text1.getText();
String PName = text2.getText();
String Gender = text3.getText();
String DoB = text4.getText();
String Address = text5.getText();
String phistry = text6.getText();

List<String> line = Arrays.asList(new String[]{ID, PName, Gender, DoB, Address, phistry});
model.add(line);

StringBuilder sb = new StringBuilder();
sb.append("ID\tFirst\tLast\tCourse\tYear\n");
for(List<String> input : model) {
for (String item : input) {
sb.append(item);
if (input.indexOf(item) == input.size()-1) {
sb.append("\n");
} else {
sb.append("\t");
}
}
}
this.phistry.setText(sb.toString());//sets the text in tab1
panel2.setModel(model);//sets the model in Doctors panel
}

但我建议将变量 model List 保留在 NewFrame 类中作为成员而不是局部变量来保存先前添加的信息

关于java - ActionListener 中的 ArrayList 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47470810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com