用于预约系统的Swing GUI

时间:2016-01-21 10:02:25

标签: java swing user-interface

任何人都可以建议我如何将我的GUI连接到我的基类 我已经编写了gui并设计了它,但是现在需要GUI来与我制作的另一个类进行交互。

编辑:在我的线程中添加了更新的代码,添加了新的方法,在按下按钮时将文本打印到TextFields。即显示约会,显示按钮旁边文本字段中的所有约会。 此外,需要尝试为用户添加一个选项,以使用公历日历格式

输入自己的约会
   package com.appointmentsys;

import javax.swing.JFrame;
import java.util.GregorianCalendar;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


/**
 * 
 * @author Daniel Burke 
 *
 */
public class ControllerGUI extends JPanel implements ActionListener{

     static JButton button1;
     static JButton button2;
     static JButton button3;
     static JButton button4;
     static JTextField ta;
     static JTextField ta1;
     static JTextField ta2;
     static JTextField ta3;


    AppointmentBook appBook = new AppointmentBook();

    public void MainForm(){

        button1.addActionListener(this);
        button2.addActionListener(this);
        button3.addActionListener(this);
        button4.addActionListener(this);
        ta.addActionListener(this);
        ta1.addActionListener(this);
        ta2.addActionListener(this);
        ta3.addActionListener(this);

                        }

  public static void CreateandShowGUI(){

      JFrame frame = new JFrame();
      JPanel panel = new JPanel();
      panel.setLayout(new GridLayout(10,10));

      button1 = new JButton("Add appointment");
      ta = new JTextField();
      /*
      TextAreaOutputStream taos = new TextAreaOutputStream( ta, 60 );
      PrintStream ps = new PrintStream( taos );
      System.setOut( ps );
      System.setErr( ps );
*/
      button2 = new JButton("Remove appointment");
      ta1 = new JTextField();
      button3 = new JButton("Show appointment");
      ta2 = new JTextField();
      button4 = new JButton("Search appointments");
      ta3 = new JTextField();

      frame.setContentPane(panel);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.pack();
      frame.setVisible(true);


     panel.add(new JLabel("         "));
     panel.add(new JLabel("        Please select an option: "));
     panel.add(new JLabel("         "));
     panel.add(new JLabel("         "));
     panel.add(button1);
     panel.add(ta);
        panel.add(button2);
        panel.add(ta1); 
        panel.add(button3);
        panel.add(ta2);
        panel.add(button4);
        panel.add(ta3);
        panel.setBorder(BorderFactory.createTitledBorder("Appointment System"));

}
  public  class EventHandler implements ActionListener{


        public void actionPerformed(ActionEvent e){
            if(e.getSource() == button1){
            appBook.add(new Appointment(new GregorianCalendar(2015, 8+1, 1, 11, 30 ), new GregorianCalendar(2015, 10, 14, 11, 30), "Dyland"));
            }
            else if(e.getSource() == button3){
                String appointmentInfo = appBook.getAppointment(0).toString();
                ta2.setText(appointmentInfo);



            }

        }
  }

    public static void main(String[] args) {

        javax.swing.SwingUtilities.invokeLater(new Runnable(){
    public void run(){
        CreateandShowGUI();
        }
            });
        }


    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub

    }




  }

package com.appointmentsys;

import java.util.ArrayList;
import java.util.GregorianCalendar;

/**
 * 
 * Controller class will test Appointment/AppointmentBook
 * @author  Daniel Burke 
 *
 */
public class Controller {

    public static void main(String[] args) {

        Appointment a1 = new Appointment(new GregorianCalendar(2015, 8+1, 14, 10, 30 ), new GregorianCalendar(2015, 10, 14, 11, 30), "Danny");
        Appointment a2 = new Appointment(new GregorianCalendar(2015, 8+1, 20, 9, 00), new GregorianCalendar(2015, 10, 20, 10, 10), "JOhn");
        Appointment a3 = new Appointment(new GregorianCalendar(2015, 8+1, 21, 14, 00), new GregorianCalendar(2015, 10, 21, 16, 00), "Steve");               
        Appointment a4 = new Appointment(new GregorianCalendar(2015, 8+1, 21, 14, 00), new GregorianCalendar(2015, 10, 21, 16, 00), "Patrick");

        AppointmentBook appBook = new AppointmentBook();
        appBook.add(a1);
        appBook.add(a2);
        appBook.add(a3);
        appBook.add(a4);

        System.out.println("Appointment is in book: " + appBook.isInBook(a1));
        System.out.println("Appointment is in book: " + appBook.isInBook(a4));
        //appBook.remove(a1);
        appBook.ShowAppointments();


    }
}

    package com.appointmentsys;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;


public class Appointment {

    //Appointments have start/end times & dates.
    //Every appointment has a title.

    private GregorianCalendar startDateTime;
    private GregorianCalendar endDateTime;
    private String eventTitle;

    //default constructor
    public Appointment(){
        this.startDateTime = null;
        this.endDateTime = null;
        this.eventTitle = "";
    }

    //constructor

    public Appointment(GregorianCalendar startDate, GregorianCalendar endDate, String eventTitle){
        this.startDateTime = startDate;
        this.endDateTime = endDate;
        this.eventTitle = eventTitle;
    }


    public GregorianCalendar getStartDateTime() {
        return startDateTime;
    }
    public void setStartDateTime(GregorianCalendar startDateTime) {
        this.startDateTime = startDateTime;
    }
    public GregorianCalendar getEndDateTime() {
        return endDateTime;
    }
    public void setEndDateTime(GregorianCalendar endDateTime) {
        this.endDateTime = endDateTime;
    }
    public String getEventTitle() {
        return eventTitle;
    }
    public void setEventTitle(String eventTitle) {
        this.eventTitle = eventTitle;
    }

    //toString() method to represent an appointment object
    public String toString(){

        String strdate = null; 
        int hours = 0;
        String hrs = null;
        int mins = 0;
        String min = null;

        SimpleDateFormat sdf = new SimpleDateFormat("MM/DD/YYYY");

        if (getStartDateTime() != null ){
            strdate = sdf.format(getStartDateTime().getTime());
            hours = getStartDateTime().get(Calendar.HOUR);
            hrs = Integer.toString(hours);
            mins = getStartDateTime().get(Calendar.MINUTE);
            min = Integer.toString(mins);
        }
        String s = getEventTitle()+" "+ strdate+" "+ hrs +": "+min;
        return "Appointment: \n" + s;



    }


}

    package com.appointmentsys;

import java.util.ArrayList;

public class AppointmentBook {

    private static final int NOTFOUND = -1; //NOTFOUND int constant 

    //We can use an ArrayList to store appointments (you could use a database)

    private ArrayList<Appointment> appointmentList  = new ArrayList<Appointment>();

    //add method to appointmentbook

    /**
     * Adds appointments to the appointmentList 
     * @param a
     */

    public void add(Appointment a ){

    appointmentList.add(a);
    }
    /**
     * create a new arrayList for all appoints then return all
     * @return
     */

    public ArrayList<Appointment> getAllAppointments(){

        ArrayList<Appointment> all = new ArrayList<Appointment>(appointmentList);
        return all;
    }
    /**
     * Prints out the list of all the appointsment made
     * 
     */
    public void ShowAppointments()
    {
        ArrayList<Appointment> all = new ArrayList<Appointment>(appointmentList);
        System.out.println();
        System.out.print("All appointments: \n");


        for(Appointment a: all)
        {
            System.out.println(a);
            System.out.println();
        }
    }
    /**
     * returns -1 if no appointment is found
     * @param tofind
     * @return
     */
    private int find(Appointment tofind)
    {
        int i = 0;

        for(Appointment a: appointmentList)
        {
            if(a.equals(tofind)) return i;
            i++;
        }
                return NOTFOUND;
    }
    /**
     * removes an appointment from the appointmentList
     * @param toRemove
     */
    public void remove(Appointment toRemove){

        int location = find(toRemove);
        if(location != NOTFOUND) appointmentList.remove(location);
        else
            throw new IllegalArgumentException("Appointment not found");
    }
    /**
     * 
     * @param a
     * @return
     */
    public boolean isInBook(Appointment a){
        return find(a) != NOTFOUND;

    }

    public String getAppointment(int i) {

        return appointmentList.get(i).toString();

    }

}

3 个答案:

答案 0 :(得分:1)

您已拥有大部分代码。您在ControllerGUI中有一个AppointmentBook类的实例

AppointmentBook appBook = new AppointmentBook();

您可以在事件处理程序中使用该appBook对象。

public  class EventHandler implements ActionListener{

    public void actionPerformed(ActionEvent e){
        if(e.getSource() == button1) {
            appBook.add(new Appointment());
        }
    }
}

我没有在那里看到Appointment类的代码,但你可以在appBook.add调用中调用Appointment类的构造函数。

E.g。

appBook.add(new Appointment("21-01-2016", "Meeting"));

如果你有一个构造函数,它接受2个字符串进行约会

编辑:

看到你的附加代码后,我发现你有2个main()方法。所以这些是真正的2个独立的程序。

您可以尝试将两种主要方法结合起来。

而不是在main方法中进行一堆约会。您应该通过单击其中一个按钮来测试添加约会。

public class EventHandler实现ActionListener {

    public void actionPerformed(ActionEvent e){
        if(e.getSource() == button1) {
            appBook.add(new Appointment(new GregorianCalendar(2015, 8+1, 14, 10, 30 ), new GregorianCalendar(2015, 10, 14, 11, 30), "Danny"));
        }
    }
}

您还可以选择另一个按钮来调用appBook.ShowAppointments()方法。

添加像这样的编码约会并不理想。所以测试一下然后添加一些允许你传入值的方法。

您根本不需要其他主要方法来实现此功能,只需使用CreateandShowGUI调用。

EDIT2: 您的Appointment类中已经有一个toString方法。 在您的AppointmentBook类中添加一个getAppointment方法,该方法允许您通过索引获取任何约会,并将该索引作为参数。会返回appointmentList.get(index);

的东西

因此,在您的eventHandler中,您可以使用它来设置文本字段。

public void actionPerformed(ActionEvent e){
        if(e.getSource() == button3) {
            String appointmentInfo = appBook.getAppointment(0).toString();
            ta.setText(appointmentInfo);
        }
    }

这假设您的appBook对象中至少有一个约会。因此,在尝试设置文本之前,您必须添加一些代码来检查appBook是否为空。

EDIT3:

您实际上并未使用EventHandler。这是您的ControllerGUI文件应该是这样的:

public class ControllerGUI extends JPanel {

    static JButton button1;
    static JButton button2;
    static JButton button3;
    static JButton button4;
    static JTextField ta;

    static AppointmentBook appBook = new AppointmentBook();
    static EventHandler eventHandler;

    public static void CreateandShowGUI() {

        JFrame frame = new JFrame();
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(10, 10));

        button1 = new JButton("Add appointment");
        button2 = new JButton("Remove appointment");
        button3 = new JButton("Show appointment");
        ta = new JTextField();
        button4 = new JButton("Search appointments");

        eventHandler = new EventHandler();
        button1.addActionListener(eventHandler);
        button2.addActionListener(eventHandler);
        button3.addActionListener(eventHandler);
        button4.addActionListener(eventHandler);

        frame.setContentPane(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);

        panel.add(new JLabel("         "));
        panel.add(new JLabel("Please select an option: "));
        panel.add(new JLabel("         "));
        panel.add(button1);
        panel.add(button2);
        panel.add(button3);
        panel.add(button4);
        panel.add(ta);
        panel.setBorder(BorderFactory.createTitledBorder("Appointment System"));

    }

    public static class EventHandler implements ActionListener {

        public void actionPerformed(ActionEvent e) {
            if (e.getSource() == button1) {
                appBook.add(new Appointment(new GregorianCalendar(2015, 8 + 1, 14, 10, 30), new GregorianCalendar(2015, 10, 14, 11, 30),
                        "Danny"));
            }

            if (e.getSource() == button3) {
                ta.setText(appBook.getAppointment(0).toString());
            }
        }
    }

    public static void main(String[] args) {

        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                CreateandShowGUI();
            }
        });
    }
}

AppointmentBook类中的方法应如下所示:

public Appointment getAppointment(int index) {
    return appointmentList.get(0);
}

我真的建议你在继续之前修改很多基础知识。您需要更好地掌握方法(传递参数和返回值)。在尝试此级别的GUI程序之前,您需要完成所有这些工作。

在上面的类中,我将EventHandler类设为静态,然后在CreateandShowGUI类中创建了它的实例。然后我将按钮添加到EventHandler(actionlistener)。这刚刚重新调整了您的代码。最好有一个类在一个单独的文件中处理所有这些,这不是一个静态类。因此,您可以实例化它并对所需的方法进行任何和所有调用,而不需要它们是静态的。

这是我现在能给予的所有帮助。

答案 1 :(得分:0)

您应该使用MVC开发方法,

您的业务逻辑位于Gui可以调用的服务的底部,然后您可以将网站/ swing /任何其他视图系统放在顶部 或多或少地将API访问到您的业务逻辑中

AppointmentService.addAppointment(约会约会); AppointmentService.getAppointments();

答案 2 :(得分:0)

从简单的命令行界面(CLI)类开始。

只需使用main()方法编写一个练习AppointmentBook的类。 一旦了解了AppointmentBook的工作原理,请返回GUI。