从ArrayList中使用的JButton,并JTextArea的GUI showInputDialog显示信息 [英] GUI display info from ArrayList using JButton, JTextArea and showInputDialog
问题描述
有谁知道如何通过一个ArrayList迭代,并使用actionPerformed方法检索项目?
基本上我试图让用户点击一个按钮。该按钮被点击一个showInputDialog出现后,再比如用户输入学生的ID号。所有学生的详细信息将出现在JTextArea或showMessageDialog框。
谁能告诉我?
在这里我只是利用学生为例实际code。
进口的java.util。*;
进口的javax.swing *。
javax.swing.event中导入*。
进口java.awt中的*。
java.awt.event中导入*。公共类DepotAdmin
{
私人的ArrayList<汽车与GT; DepoVehicle =新的ArrayList<车辆与GT;();
公共DepotAdmin(HD字符串,字符串C,串M,STRING D,燃料P,诠释EngSize)
{
DepoVehicle =新的ArrayList<车辆与GT;(); }
私人无效setupDepot(){
// DepotArraylist车辆=新DepotArraylist(1111,1111,1111,1111,新燃料(),0); DepoVehicle.add(新车(BobMart,567890,沃尔沃,2014年4月6日,新的燃料(柴油),6000));
DepoVehicle.add(新车(BobMart,465783,宝马,12/052014,新的燃料(汽油),8000));
DepoVehicle.add(新车(BobMart,348709,福特,13/08/2014,新的燃料(汽油),3000));
DepoVehicle.add(新车(BobMart,145367,凌志,18/08/2015,新的燃料(柴油),2000年));
DepoVehicle.add(新RentableCar(BobMart,847469,Citreon,2015年8月7日,新燃料(柴油),1000));
汽车CAR1 =新车(BobMart,567890,沃尔沃,2014年4月6日,新的燃料(柴油),6000); 公车byMake(字符串MAKE)
{
线St [] = DepoVehicle.toArray(新的String [DepoVehicle.size()]);
对于(车辆V:DepoVehicle)
如果(v.getMake()。等于(使)){
返回伏;
}
返回null; }
私人的JFrame仓库;
私人车辆JMenu的;
私人JMenu的searchVehicle;
私人JMenu的rentVehicle;
私人JMenu的returnVehicle;
私人的JMenuItem vehicles1;
私人的JMenuItem searchVehicle1;
私人的JMenuItem rentVehicle1;
私人的JMenuItem returnVehicle1;
私人的JTextArea textarea的;
私人的JMenuBar菜单栏;
私人JList的VLIST;
私人ResDepotAdmin侦听器;
私人ResDepotAdmin listener1;
私人ResDepotAdmin LISTENER2;
私人ResDepotAdmin listener3;
私人的JLabel repeatLabel;
私人的JTextField的inputText;
私人的JPanel textPanel;
公共DepotAdmin(){
//创建框架菜单栏的位置
得宝=新的JFrame(返厂);
//创建菜单栏放置菜单项
菜单栏=新的JMenuBar();
//设置在帧中的菜单栏
Depot.setJMenuBar(菜单栏);
//设置菜单,在菜单栏上
车辆=新JMenu,(汽车);
menubar.add(车辆);
searchVehicle =新JMenu,(搜索);
menubar.add(searchVehicle);
rentVehicle =新JMenu,(租);
menubar.add(rentVehicle);
returnVehicle =新JMenu,(回归);
menubar.add(returnVehicle);
//设置对menues的菜单项
vehicles1 =新的JMenuItem(车辆列表);
Vehicles.add(vehicles1);
searchVehicle1 =新的JMenuItem(搜索车辆);
searchVehicle.add(searchVehicle1);
rentVehicle1 =新的JMenuItem(租车辆);
rentVehicle.add(rentVehicle1);
returnVehicle1 =新的JMenuItem(退车);
returnVehicle.add(returnVehicle1);
//数据显示部分
TEXTAREA =新的JTextArea(70,70);
textPanel =新JPanel();
//添加到textarea的面板
textPanel.add(TEXTAREA);
//添加面板框架
Depot.add((textPanel),BorderLayout.CENTER);
听众响应由尿白蛋白排泄率点击
听众=新ResDepotAdmin();
listener1 =新ResDepotAdmin();
LISTENER2 =新ResDepotAdmin();
listener3 =新ResDepotAdmin();
vehicles1.addActionListener(监听);
searchVehicle1.addActionListener(listener1);
rentVehicle1.addActionListener(LISTENER2);
returnVehicle.addActionListener(listener3);
字符串vehicleMake =让;
//JOptionPane.showInputDialog(searchVehicle1,\"Enter车辆制造);
//设置帧的大小
Depot.setSize(600600);
// AET帧的能见度
Depot.setVisible(真);
// prevent的退出运行程序
Depot.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); }
公共类ResDepotAdmin实现的ActionListener
{
私人字符串化妆;
私人无效setupDepot(){
DepotArraylist车辆=新DepotArraylist(1111,1111,1111,1111,新燃料(),0);
vehicles.addVehicle(新车(BobMart,567890,沃尔沃,2014年4月6日,新的燃料(柴油),6000));
vehicles.addVehicle(新车(BobMart,465783,宝马,12/052014,新的燃料(汽油),8000));
vehicles.addVehicle(新车(BobMart,348709,福特,13/08/2014,新的燃料(汽油),3000));
vehicles.addVehicle(新车(BobMart,145367,凌志,18/08/2015,新的燃料(柴油),2000年));
vehicles.addVehicle(新RentableCar(BobMart,847469,Citreon,2015年8月7日,新燃料(柴油),1000));
汽车CAR1 =新车(BobMart,567890,沃尔沃,2014年4月6日,新的燃料(柴油),6000);}
公车findVehicle(字符串MAKE)
{
对于(车辆DV:DepoVehicle)
如果(dv.getMake()。等于(做))
回到DV;
返回null;
}
公共无效的actionPerformed(ActionEvent的五)
{
// DepotAdmin DepoVehicle =新DepotAdmin(空,空,空,空,新燃料(),0); ArrayList的<汽车与GT; DepoVehicle =新的ArrayList<车辆与GT;();
DepoVehicle.add(新车(BobMart,567890,沃尔沃,2014年4月6日,新的燃料(柴油),6000));
DepoVehicle.add(新车(BobMart,348709,福特,13/08/2014,新的燃料(汽油),3000));
如果(e.getSource()== vehicles1){
textArea.append(DepoVehicle.toString()+\\ n+\\ n);
}
字符串化妆= JOptionPane.showInputDialog(NULL,输入车辆制造); 如果(e.getSource()== searchVehicle1){ 对于(车辆V:DepoVehicle){如果(v.getMake()等于(使)){
textArea.append(使); }
} }
}
}
}
我真的不知道如何跨$ P $磅的事实,你有一个关于汽车的消息,但希望学生为输入。所以我改变了它周围的一点点。相应地进行更改。
我只是循环,如果学生证的输入相匹配,我附加了学生对文本区域
公共无效的actionPerformed { 字符串stuId = JOptionPane.showInputDialog(NULL,输入学号); 对于(学生学生:学生){
如果(student.getId()。等于(stuId)){
textArea.append(学生);
打破;
}
}
}
-
另外,我注意到你有一个在
主
方法内的actionPerformed。你们是不是要建立一个GUI程序?监守在这一点上,你的code是远离完成它。 -
您似乎也有内部的方法的
主
这是一个没有没有。你绝不code编译。请发表compileable程序,所以我们可以看到你试图完成什么。因为在您的文章中code是垃圾。
另外一个巨大的错误,我注意到这里
字符串名称;
字符串ID;
公益助学(字符串N,字符串我){
N =名称;
I = ID;
}
您的构造函数是错误的。 N =名称
什么都不做。相反,你想要
名称= N;
ID = I;
还有学生
取字符串输入,但是你要添加一个 INT
。也许这只是一个尝试SSCCE,但都拿到从文本字段这些输入,它的工作,但如果你硬编码的,他们需要的是字符串。
pupils.add(新学生(詹姆斯,2345));
pupils.add(新学生(泰勒,5768));
pupils.add(新学生(刘德华,9874));
也为你的学生
类,如果你想字符串重新Student对象的presentation,你应该@Override的的toString()
方法,像这样
公共字符串的toString(){
//我错了吗?
回到学生姓名+姓名+,ID:+ ID;
}
下面是一个简单的可运行完整的程序,所以你可以看到一切是如何结合在一起的。检查它,看看你可能会错。随意问的问题。
进口java.awt.BorderLayout中;
java.awt.event中导入*。
进口的java.util.ArrayList;
进口的javax.swing *。公共类StudentGUI扩展的JFrame { 私人的JTextArea jtaStudent =新的JTextArea(10,30);
私人的JButton showStudents =的新的JButton(显示学生);
ArrayList的<的Student GT;学生=新的ArrayList<>(); 公共StudentGUI(){
pupils.add(新学生(詹姆斯,2345));
pupils.add(新学生(泰勒,5768));
pupils.add(新学生(刘德华,9874)); 加(showStudents,BorderLayout.SOUTH);
加(jtaStudent,BorderLayout.CENTER); showStudents.addActionListener(新的ActionListener(){
公共无效的actionPerformed(ActionEvent的五){
对于(学生学生:学生){
jtaStudent.append(学生+\\ n);
}
}
});
} 公共静态无效的主要(字串[] args){
SwingUtilities.invokeLater(Runnable的新(){
公共无效的run(){
JFrame的帧=新StudentGUI();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(NULL);
frame.setVisible(真); }
});
}
}类学生{
字符串名称;
字符串ID; 公益助学(字符串N,字符串我){
名称= N;
ID = I;
} 公共字符串的getName(){
返回名称;
} 公共字符串的getId(){
返回ID;
} 公共字符串的toString(){
//我错了吗?
回到学生姓名+姓名+,ID:+ ID;
}
}
Does anyone know how to iterate through an ArrayList and retrieve an item by using the actionPerformed method?
Basically I'm trying to let the user click a button. After that button is clicked a showInputDialog appears, then the user for instance enters the id number of a student. All that student's details will appear in a jtextArea or showMessageDialog box.
Can anyone show me? here is the actual code I was just using the student as example.
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
public class DepotAdmin
{
private ArrayList<Vehicle> DepoVehicle = new ArrayList<Vehicle>();
public DepotAdmin(String hd,String c, String m, String d,Fuel p,int EngSize)
{
DepoVehicle = new ArrayList<Vehicle>();
}
private void setupDepot(){
//DepotArraylist vehicles = new DepotArraylist("1111","1111","1111","1111",new Fuel(""),0);
DepoVehicle.add(new Car("BobMart","567890","Volvo","04/06/2014", new Fuel("Diesel"),6000));
DepoVehicle.add(new Car("BobMart","465783","BMW","12/052014", new Fuel ("Petrol"), 8000));
DepoVehicle.add(new Car("BobMart","348709","Ford","13/08/2014",new Fuel ("Petrol"), 3000));
DepoVehicle.add(new Car("BobMart","145367","Lexus","18/08/2015",new Fuel ("Diesel"), 2000));
DepoVehicle.add(new RentableCar("BobMart","847469","Citreon","08/07/2015",new Fuel("Diesel"),1000));
Car car1 = new Car("BobMart","567890","Volvo","04/06/2014", new Fuel("Diesel"),6000);
public Vehicle byMake(String make)
{
String st[]=DepoVehicle.toArray(new String[DepoVehicle.size()]);
for ( Vehicle v : DepoVehicle)
if (v.getMake().equals(make)){
return v;
}
return null;
}
private JFrame Depot ;
private JMenu Vehicles;
private JMenu searchVehicle;
private JMenu rentVehicle;
private JMenu returnVehicle;
private JMenuItem vehicles1;
private JMenuItem searchVehicle1;
private JMenuItem rentVehicle1;
private JMenuItem returnVehicle1;
private JTextArea textArea;
private JMenuBar menubar;
private JList vList;
private ResDepotAdmin listener;
private ResDepotAdmin listener1;
private ResDepotAdmin listener2;
private ResDepotAdmin listener3;
private JLabel repeatLabel;
private JTextField inputText;
private JPanel textPanel;
public DepotAdmin(){
//creating the frame to place the menu bar
Depot = new JFrame ("Depot");
//creating the menubar to place the menu items
menubar = new JMenuBar();
//set the menu bar in the frame
Depot.setJMenuBar(menubar);
//set the menus on the menu bar
Vehicles = new JMenu ("vehicles");
menubar.add(Vehicles);
searchVehicle = new JMenu ("search");
menubar.add(searchVehicle);
rentVehicle = new JMenu ("rent");
menubar.add(rentVehicle);
returnVehicle = new JMenu ("return");
menubar.add(returnVehicle);
//set the menu items on the menues
vehicles1 = new JMenuItem ("Vehicle List");
Vehicles.add(vehicles1);
searchVehicle1 = new JMenuItem ("Search Vehicle");
searchVehicle.add(searchVehicle1);
rentVehicle1 = new JMenuItem ("Rent Vehicle");
rentVehicle.add(rentVehicle1);
returnVehicle1 = new JMenuItem ("Return Vehicle");
returnVehicle.add(returnVehicle1);
//data display section
textArea = new JTextArea(70,70);
textPanel = new JPanel();
//add textarea to panel
textPanel.add(textArea);
//add panel to frame
Depot.add((textPanel),BorderLayout.CENTER);
listeners to respond to click by uaer
listener = new ResDepotAdmin();
listener1 = new ResDepotAdmin();
listener2 = new ResDepotAdmin();
listener3 = new ResDepotAdmin();
vehicles1.addActionListener(listener);
searchVehicle1.addActionListener(listener1);
rentVehicle1.addActionListener(listener2);
returnVehicle.addActionListener(listener3);
String vehicleMake = "make";
//JOptionPane.showInputDialog(searchVehicle1,"Enter vehicle make");
//set the size of the frame
Depot.setSize(600,600);
//aet the visibility of the frame
Depot.setVisible(true);
//prevent the running the the program on exit
Depot.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public class ResDepotAdmin implements ActionListener
{
private String make;
private void setupDepot(){
DepotArraylist vehicles = new DepotArraylist("1111","1111","1111","1111",new Fuel(""),0);
vehicles.addVehicle(new Car("BobMart","567890","Volvo","04/06/2014", new Fuel("Diesel"),6000));
vehicles.addVehicle(new Car("BobMart","465783","BMW","12/052014", new Fuel ("Petrol"), 8000));
vehicles.addVehicle(new Car("BobMart","348709","Ford","13/08/2014",new Fuel ("Petrol"), 3000));
vehicles.addVehicle(new Car("BobMart","145367","Lexus","18/08/2015",new Fuel ("Diesel"), 2000));
vehicles.addVehicle(new RentableCar("BobMart","847469","Citreon","08/07/2015",new Fuel("Diesel"),1000));
Car car1 = new Car("BobMart","567890","Volvo","04/06/2014", new Fuel("Diesel"),6000);
}
public Vehicle findVehicle(String make)
{
for (Vehicle dv : DepoVehicle)
if (dv.getMake().equals(make))
return dv;
return null;
}
public void actionPerformed(ActionEvent e)
{
//DepotAdmin DepoVehicle = new DepotAdmin("null","null","null","null",new Fuel(""),0);
ArrayList<Vehicle> DepoVehicle = new ArrayList<Vehicle>();
DepoVehicle.add(new Car("BobMart","567890","Volvo","04/06/2014", new Fuel("Diesel"),6000));
DepoVehicle.add(new Car("BobMart","348709","Ford","13/08/2014",new Fuel ("Petrol"), 3000));
if ( e.getSource() == vehicles1){
textArea.append(DepoVehicle.toString()+"\n"+"\n");
}
String make = JOptionPane.showInputDialog(null,"Enter vehicle make");
if (e.getSource()== searchVehicle1){
for ( Vehicle v : DepoVehicle){ if (v.getMake().equals(make)){
textArea.append(make);
}
}
}
}
}
}
I wasn't really sure how to interpret the fact that you have a message about a car, but you want the student as an input. So I changed it around a little. Make your changes accordingly.
I just looped, and if the student Id matches the input, I appended the student to the text area
public void actionPerformed{
String stuId = JOptionPane.showInputDialog(null,"Enter Student ID");
for (Student student : pupils){
if (student.getId().equals(stuId)){
textArea.append(student);
break;
}
}
}
Also, I noticed you have an actionPerformed inside the
main
method. Are you trying to create a GUI program? Becuase at this point, your code is far from accomplishing it.You also seem to have a method inside of a
main
which is a no no. You're code in no way compiles. Please post a compileable program so we can see exactly what you trying to accomplish. Because the code in your post is rubbish.
Another HUGE fault I noticed is here
String name;
String id;
public Student (String n, String i) {
n = name;
i = id;
}
Your constructor is wrong. n = name
does nothing. Instead you want
name = n;
id = i;
Also Student
take a String input, but you're trying to add an int
. Maybe that was just for an SSCCE attempt, but it were getting those input from a text field, it would work, but if you're hard coding it in, they need to be String.
pupils.add(new Student("james", "2345"));
pupils.add(new Student ("taylor", "5768"));
pupils.add(new Student("andy", "9874"));
Also for your Student
class if you want the String representation of the Student object, you should @Override the toString()
method, something like this
public String toString() {
//am i wrong here?
return "Student Name: " + name + ", ID: " + id;
}
Here's a simple complete runnable program so you can see how everything fits together. Examine it to see where you may be going wrong. Feel free to ask questions.
import java.awt.BorderLayout;
import java.awt.event.*;
import java.util.ArrayList;
import javax.swing.*;
public class StudentGUI extends JFrame {
private JTextArea jtaStudent = new JTextArea(10, 30);
private JButton showStudents = new JButton("Show Students");
ArrayList<Student> pupils = new ArrayList<>();
public StudentGUI() {
pupils.add(new Student("james", "2345"));
pupils.add(new Student("taylor", "5768"));
pupils.add(new Student("andy", "9874"));
add(showStudents, BorderLayout.SOUTH);
add(jtaStudent, BorderLayout.CENTER);
showStudents.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
for (Student student : pupils) {
jtaStudent.append(student + "\n");
}
}
});
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new StudentGUI();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
class Student {
String name;
String id;
public Student(String n, String i) {
name = n;
id = i;
}
public String getName() {
return name;
}
public String getId() {
return id;
}
public String toString() {
// am i wrong here?
return "Student Name: " + name + ", ID: " + id;
}
}
这篇关于从ArrayList中使用的JButton,并JTextArea的GUI showInputDialog显示信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!