2016-01-21 58 views
0

可能有人告诉我如何我的GUI连接到我的基类 我已经写了图形用户界面和设计,但现在需要的GUI与其他类我做交互。聘任制度Swing GUI的

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

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(); 

    } 

} 
+0

如果你不知道如何“连接”两个类,你应该学习基础知识,而不是编写UI代码。 – Stultuske

回答

0

你应该用发展的MVC方法进入自己的任命,

你的业务逻辑是在底部访问Gui可以调用的服务,然后您可以在顶部 上放置一个网站/摆动/任何其他查看系统或多或少地访问您的业务逻辑的API

AppointmentService.addAppointment(Appointment appointment); AppointmentService.getAppointments();

etc

1

您已经有大部分的代码。你有你的AppointmentBook类的实例在ControllerGUI

AppointmentBook appBook = new AppointmentBook(); 

您可以使用在事件处理appBook对象。

public class EventHandler implements ActionListener{ 

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

我没有看到的约会类那里的代码,但你可以调用任何的构造是在appBook.add呼叫你的约会类。

E.g.

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

如果你有一个构造函数在2串预约

编辑:

看到你额外的代码我看到之后,你有2个主要的()方法。所以这些是真正的2个独立的程序。

您可以尝试到2种主要的方法结合起来。

而不是使一堆约会中的主要方法。您应该通过单击其中一个按钮来测试添加约会。

公共类事件处理程序实现的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()方法。

添加harcoded约会一样,是不理想的,但。所以测试一下,然后添加一些方法,允许您传入值。

您不需要其他主要方法都来得到这个工作,只是一个与CreateandShowGUI通话。

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

所以在你的eventHandler中,你可以使用它来设置你的文本字段。

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

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

编辑3:

你实际上并没有使用你的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类设为static,然后在CreateandShowGUI类中创建了它的一个实例。然后我将按钮添加到EventHandler(actionlistener)。这只是完成了你的代码。最好有一个类在单独的文件中处理所有这些,而不是静态类。所以你可以实例化它,并且对你想要的方法进行任何和所有的调用,而不是静态的。

这就是我现在可以给予的所有帮助。

+0

谢谢,我刚刚在线程中添加了Appointment类,忘记添加它原来 – Gdohfg

+0

谢谢!我还将ShowAppointments()方法添加到我的事件处理程序中,您是否知道如何将结果打印到JTextField中? – Gdohfg

+0

您可以向AppointmentBook类添加方法以返回约会的字符串或所有约会。见上面的下一个编辑。 –

0

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

只需使用练习AppointmentBook的main()方法编码类即可。 一旦您了解了AppointmentBook的工作方式,就返回到您的GUI。