#java #swing #sorting #jtextarea
#java #swing #сортировка #jtextarea
Вопрос:
Итак, вот мой код, я создаю программу, которая сортирует текст по экземплярам объектов, которые создаются автоматически, когда пользователь начинает вводить текст в JTextArea. Здесь, в классе StudentList, у меня есть строка firstname, lastname, dateofbirth и year. Когда пользователь начинает вводить, создается экземпляр StudentList, затем первый текст перед тем, как пользователь делает пробел, сохраняется как firstname, а текст после пробела lastname, пользователь нажимает enter, и текст после ввода становится датой рождения в формате (мм / дд / гггг), и пользователь снова нажимает enter, и текст после ввода становится годом (в форме «Номер года, т. е. Год 10, год 12 …). Например: JosephsNancy 3/04/2009 nYear 11 имя становится: Джозеф, фамилия: Нэнси. дата рождения: 04.03.1999 год: 11-й год для первого созданного экземпляра объекта типа StudentList.
Впоследствии, после создания первого объекта и сохранения year (переменной последнего экземпляра), мне понравится другой экземпляр StudentList, где процесс повторяется, если текст вводится после Year … Справка Все вновь созданные StudentList добавляются в ArrayList
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.util.*;
public class InfoAdd implements KeyListener {
private JTextArea textar;
private JTextArea textarea;
private JPanel panel;
ArrayList <StudentList> stdlist;
public static void main (String [] args) {
InfoAdd inadd = new InfoAdd();
inadd.go();
}
public void go() {
JFrame frame = new JFrame("InfoAdd");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
panel = new JPanel();
JPanel btpanel = new JPanel();
JButton button = new JButton("Click");
textarea = new JTextArea(10, 15);
textar = new JTextArea(10, 15);
JScrollPane scrollpane = new JScrollPane(textarea);
JScrollPane scrollpan = new JScrollPane(textar);
textarea.addKeyListener(this);
textarea.setLineWrap(true);
textar.setLineWrap(true);
scrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollpan.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollpan.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(scrollpane);
panel.add(scrollpan);
btpanel.add(button);
frame.setSize(300, 300);
frame.add(BorderLayout.WEST, panel);
frame.add(BorderLayout.EAST, btpanel);
frame.setVisible(true);
}
public void keyTyped(KeyEvent e) {
String add = textarea.getText();
String [] delimiter = add.split("\s ");
String [] enter = add.split("[\r\n] ");
stdlist = new ArrayList<StudentList>();
for(int i=0;i<add.length();i ) {
StudentList sdt = new StudentList();
if(delimiter.length==2) {
sdt.SetFirstName(delimiter[i]);
}
stdlist.add(sdt);
textar.setEditable(false);
textar.setText("Firstname: " sdt.getFirstName() "nLastName: " sdt.getLastName() "nYear: ");
}
}
public void keyPressed(KeyEvent e) {
}
public void keyReleased(KeyEvent e) {
}
class StudentList {
private String firstname;
private String lastname;
private String year;
private String dateofbirth;
public void SetFirstName(String y) {
y = firstname;
}
public void setLastName(String c) {
c = lastname;
}
public void setYear(String t) {
t = year;
}
public void setDateofBirth(String u) {
u = dateofbirth;
}
public String getFirstName() {
return firstname;
}
public String getLastName() {
return lastname;
}
public String getYear() {
return year;
}
public String getDateofBirth(){
return dateofbirth;
}
}
}
Комментарии:
1. Одна вещь, которую стоит исправить в первую очередь, — это назначение в ваших
StudentList
установщиках, они работают неправильно, поэтому вы пытаетесь присвоить значение элемента параметру, а не значение параметра полю элемента. например, это должно бытьpublic void setFirstName(String y) { firstname = y; }
(Кстати,y
не самое удачное имя).2. Когда вы хотите прослушать текстовые изменения в текстовых компонентах, используйте
DocumentListener
вместоKeyListener
. Нравится:textArea.getDocument().addDocumentListener()
Ответ №1:
как упоминает Д.Дж.Браун, ваше создание setter неверно, и я меняю некоторую строку кода в InfoAdd
классе.(netbeans, intellij idea, eclipse, если вы используете одну из этих IDE. эта IDE предоставляет возможность генерировать методы получения и настройки. используйте это, тогда у вас не возникнет проблем)
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.util.*;
public class InfoAdd implements KeyListener {
private JTextArea textar;
private JTextArea textarea;
private JPanel panel;
ArrayList<StudentList> stdlist;
public static void main(String[] args) {
InfoAdd inadd = new InfoAdd();
inadd.go();
}
public void go() {
JFrame frame = new JFrame("InfoAdd");
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
panel = new JPanel();
JPanel btpanel = new JPanel();
JButton button = new JButton("Click");
textarea = new JTextArea(10, 15);
textar = new JTextArea(10, 15);
JScrollPane scrollpane = new JScrollPane(textarea);
JScrollPane scrollpan = new JScrollPane(textar);
textarea.addKeyListener(this);
textarea.setLineWrap(true);
textar.setLineWrap(true);
scrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollpane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollpan.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
scrollpan.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(scrollpane);
panel.add(scrollpan);
btpanel.add(button);
frame.setSize(300, 300);
frame.add(BorderLayout.WEST, panel);
frame.add(BorderLayout.EAST, btpanel);
frame.setVisible(true);
}
public void keyTyped(KeyEvent e) { }
public void keyPressed(KeyEvent e) { }
public void keyReleased(KeyEvent e) {
String add = textarea.getText();
String[] delimiter = add.split("\s ");
String[] enter = add.split("[\r\n] ");
stdlist = new ArrayList<>();
for (int i = 0; i <= add.length(); i ) {
StudentList studentList = new StudentList();
System.out.println(delimiter.length);
switch (enter.length) {
case 1:
setName(delimiter, studentList);
break;
case 2:
setName(delimiter, studentList);
studentList.setDateofbirth(enter[1]);
break;
default:
setName(delimiter, studentList);
studentList.setDateofbirth(enter[1]);
studentList.setYear(enter[2]);
break;
}
stdlist.add(studentList);
textar.setEditable(false);
textar.setText("Firstname: " studentList.getFirstname() "nLastName: " studentList.getLastname() " nDateOfBirth: " studentList.getDateofbirth() "nYear: " studentList.getYear());
}
}
private void setName(String[] delimiter, StudentList studentList) {
if (delimiter.length == 1) {
studentList.setFirstname(delimiter[0]);
} else if (delimiter.length == 2) {
studentList.setFirstname(delimiter[0]);
studentList.setLastname(delimiter[1]);
}
}
class StudentList {
private String firstname;
private String lastname;
private String year;
private String dateofbirth;
public String getFirstname() {
return firstname;
}
public void setFirstname(String firstname) {
this.firstname = firstname;
}
public String getLastname() {
return lastname;
}
public void setLastname(String lastname) {
this.lastname = lastname;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getDateofbirth() {
return dateofbirth;
}
public void setDateofbirth(String dateofbirth) {
this.dateofbirth = dateofbirth;
}
}
}