从ArrayList中使用的JButton,并JTextArea的GUI showInputDialog显示信息 [英] GUI display info from ArrayList using JButton, JTextArea and showInputDialog

查看:122
本文介绍了从ArrayList中使用的JButton,并JTextArea的GUI 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(车辆);
    sea​​rchVehicle =新JMenu,(搜索);
    menubar.add(searchVehicle);
    rentVehicle =新JMenu,(租);
    menubar.add(rentVehicle);
    returnVehicle =新JMenu,(回归);
    menubar.add(returnVehicle);
    //设置对menues的菜单项
    vehicles1 =新的JMenuItem(车辆列表);
    Vehicles.add(vehicles1);
    sea​​rchVehicle1 =新的JMenuItem(搜索车辆);
    sea​​rchVehicle.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(监听);
    sea​​rchVehicle1.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆