任何人都可以建议我如何将我的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();
}
}
答案 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。