From: camjan Date: Wed, 8 Apr 2015 11:57:07 +0000 (+0200) Subject: House features gui created X-Git-Url: https://xp-dev.com/git/RRRRHHHH_Code/commitdiff_plain/cff7b0aa582e56fe91649b23b1fd720e7a9dee65 House features gui created --- diff --git a/ruralHouses/src/dataAccess/DB4oManager.java b/ruralHouses/src/dataAccess/DB4oManager.java index adc1da4..12ff701 100644 --- a/ruralHouses/src/dataAccess/DB4oManager.java +++ b/ruralHouses/src/dataAccess/DB4oManager.java @@ -37,7 +37,7 @@ public class DB4oManager { private static DB4oManager theDB4oManager = null; private static DB4oManagerAux theDB4oManagerAux; - + static ConfigXML c; private DB4oManager() throws Exception { @@ -112,12 +112,14 @@ public class DB4oManager { try { Owner jon = new Owner("Jon"); Owner alfredo = new Owner("Alfredo"); - jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Ezkio", 3, 3, 3, 3, 3); - jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Jaca", 4, 4, 4, 4, 4); + jon.addRuralHouse("Ezkioko", "Ezkioko etxea", "Beatriz", 3, 3, 3, 3, + 3); + jon.addRuralHouse("Eskiatze", "Eskiatzeko etxea", "Guazate", 4, 4, 4, + 4, 4); jon.setBankAccount("1349 5677 21 2133567777"); - alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Pitillas", 5, 5, 5, 5, - 5); - alfredo.addRuralHouse("Murgoitz", "", "Murgia", 6, 6, 6, 6, 6); + alfredo.addRuralHouse("Aitonako", "Casa del abuelo", "Vegas", 5, + 5, 5, 5, 5); + alfredo.addRuralHouse("Murgoitz", "", "Cedro", 6, 6, 6, 6, 6); alfredo.setBankAccount("4144 0087 23 9700002133"); Account jonAcc = new Account("userJon", "passJon", jon); Account alfredoAcc = new Account("userAlfredo", "passAlfredo", @@ -153,8 +155,7 @@ public class DB4oManager { db.close(); } } - - + @SuppressWarnings("finally") public Offer createOffer(RuralHouse ruralHouse, Date firstDay, Date lastDay, float price) throws RemoteException, Exception { @@ -167,8 +168,8 @@ public class DB4oManager { try { - RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), - null, null, null, null); + RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null, + null, null, null); ObjectSet result = db.queryByExample(proto); RuralHouse rh = (RuralHouse) result.next(); o = rh.createOffer(theDB4oManagerAux.offerNumber++, firstDay, @@ -196,7 +197,6 @@ public class DB4oManager { try { - db.store(offer); db.commit(); @@ -208,9 +208,10 @@ public class DB4oManager { } return offer; } - + @SuppressWarnings("finally") - public void deleteOffer(RuralHouse rh, Offer offer) throws RemoteException, Exception { + public void deleteOffer(RuralHouse rh, Offer offer) throws RemoteException, + Exception { if (c.isDatabaseLocal() == false) openSDB(); else @@ -229,7 +230,6 @@ public class DB4oManager { db.close(); } } - /** * This method creates a book with a corresponding parameters @@ -254,9 +254,8 @@ public class DB4oManager { if (c.isDatabaseLocal() == false) openSDB(); - RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), - null, ruralHouse.getDescription(), ruralHouse.getDistrict(), - null); + RuralHouse proto = new RuralHouse(ruralHouse.getHouseName(), null, + ruralHouse.getDescription(), ruralHouse.getDistrict(), null); ObjectSet result = db.queryByExample(proto); RuralHouse rh = (RuralHouse) result.next(); @@ -337,10 +336,9 @@ public class DB4oManager { try { - RuralHouse rhn = (RuralHouse) db - .queryByExample( - new RuralHouse(rh.getHouseName(), null, null, - null, null)).next(); + RuralHouse rhn = (RuralHouse) db.queryByExample( + new RuralHouse(rh.getHouseName(), null, null, null, null)) + .next(); if (rhn.overlapsWith(firstDay, lastDay) != null) throw new OverlappingOfferExists(); else @@ -401,8 +399,8 @@ public class DB4oManager { openDB(); boolean stored = false; - RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, - null, null); + RuralHouse house = new RuralHouse(rh.getHouseName(), null, null, null, + null); try { ObjectSet result = db.queryByExample(house); if (result.isEmpty()) { @@ -416,18 +414,17 @@ public class DB4oManager { return stored; } - public void removeHouse(RuralHouse rh, Owner owner) { if (c.isDatabaseLocal() == false) openSDB(); else - openDB(); + openDB(); try { ObjectSet result = db.queryByExample(rh); if (!result.isEmpty()) { RuralHouse found = (RuralHouse) result.get(0); -// db.delete(found.getOwner()); + // db.delete(found.getOwner()); db.store(owner); db.delete(found); db.commit(); @@ -439,10 +436,10 @@ public class DB4oManager { } } - - public Vector getRuralHousesByTown(String town){ - RuralHouse rh = new RuralHouse(null,null,null,town,null); - + + public Vector getRuralHousesByTown(String town) { + RuralHouse rh = new RuralHouse(null, null, null, town, null); + if (c.isDatabaseLocal() == false) openSDB(); else @@ -459,49 +456,50 @@ public class DB4oManager { } } - public RuralHouse getRuralHouseByName(String name){ - RuralHouse rh = new RuralHouse(name,null,null,null,null); - + + public RuralHouse getRuralHouseByName(String name) { + RuralHouse rh = new RuralHouse(name, null, null, null, null); + if (c.isDatabaseLocal() == false) openSDB(); else openDB(); - - try{ + + try { ObjectSet result = db.queryByExample(rh); Vector ruralHouses = new Vector(); - while(result.hasNext()) + while (result.hasNext()) ruralHouses.add(result.next()); db.close(); - return ruralHouses.get(0); - } catch (NullPointerException e){ + if (!ruralHouses.isEmpty()) + return ruralHouses.get(0); + else + return null; + } catch (NullPointerException e) { return null; } - - - + } - - public Vector getRuralHouses(String town,int nBed , int nKit, int nBath, int nPark, int nLiv){ - HouseFeatures fea = new HouseFeatures(nBed,nKit,nBath,nLiv,nPark); - RuralHouse rh = new RuralHouse(null,null,null,town,fea); + + public Vector getRuralHouses(String town, int nBed, int nKit, + int nBath, int nPark, int nLiv) { + HouseFeatures fea = new HouseFeatures(nBed, nKit, nBath, nLiv, nPark); + RuralHouse rh = new RuralHouse(null, null, null, town, fea); if (c.isDatabaseLocal() == false) openSDB(); else openDB(); - - try{ + + try { ObjectSet result = db.queryByExample(rh); Vector ruralHouses = new Vector(); - while(result.hasNext()) + while (result.hasNext()) ruralHouses.add(result.next()); db.close(); return ruralHouses; - } catch (NullPointerException e){ + } catch (NullPointerException e) { return null; } - - - + } } diff --git a/ruralHouses/src/domain/RuralHouse.java b/ruralHouses/src/domain/RuralHouse.java index 2e61137..423d5e7 100644 --- a/ruralHouses/src/domain/RuralHouse.java +++ b/ruralHouses/src/domain/RuralHouse.java @@ -130,7 +130,17 @@ public class RuralHouse implements Serializable { return availableOffers; } - + public Vector getAllOffers() { + Vector availableOffers=new Vector(); + Iterator e=offers.iterator(); + Offer offer; + while (e.hasNext()){ + offer=e.next(); + if ( (offer.getBooking()==null) ) + availableOffers.add(offer); + } + return availableOffers; + } /** * This method obtains the offer that match exactly with a given dates that has not been booked * @@ -149,6 +159,7 @@ public class RuralHouse implements Serializable { return null; } + public Offer overlapsWith( Date firstDay, Date lastDay) { Iterator e=offers.iterator(); diff --git a/ruralHouses/src/gui/HouseFeaturesGUI.java b/ruralHouses/src/gui/HouseFeaturesGUI.java new file mode 100644 index 0000000..8b5778b --- /dev/null +++ b/ruralHouses/src/gui/HouseFeaturesGUI.java @@ -0,0 +1,200 @@ +package gui; + +import java.awt.Color; +import java.awt.Component; +import java.util.Date; +import java.util.Enumeration; +import java.util.Vector; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.SwingConstants; +import javax.swing.border.EmptyBorder; +import javax.swing.table.DefaultTableCellRenderer; +import javax.swing.table.DefaultTableModel; + +import domain.Offer; +import domain.RuralHouse; + + + +public class HouseFeaturesGUI extends JFrame { + + /** + * + */ + private static final long serialVersionUID = 1L; + private JPanel contentPane; + private JLabel lblDistrict; + private JTextField District_f; + private JLabel lblDescription; + private JTextField description_f; + private JLabel lblKitchen; + private JTextField kitchens_f; + private JLabel lblRooms; + private JTextField rooms_f; + private JLabel lblLivings; + private JTextField lRooms_f; + private JLabel lblParkings; + private JTextField parkings_f; + private JLabel lblBaths; + private JTextField baths_f; + private JTable table; + private DefaultTableModel tableModel; + private DefaultTableCellRenderer tableRenderer = new DefaultTableCellRenderer(); + + + /** + * Create the frame. + */ + + public HouseFeaturesGUI(RuralHouse rh, Date FirstDay, Date LastDay) { + + this.getContentPane().setLayout(null); + setBounds(100, 100, 500, 583); + contentPane = new JPanel(); + contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); + setContentPane(contentPane); + + lblDistrict = new JLabel("District:"); + lblDistrict.setBounds(23, 67, 70, 14); + lblDistrict.setHorizontalAlignment(SwingConstants.RIGHT); + + District_f = new JTextField(); + District_f.setEditable(false); + District_f.setBounds(103, 64, 86, 20); + District_f.setColumns(10); + + lblDescription = new JLabel("Description:"); + lblDescription.setBounds(215, 67, 90, 14); + lblDescription.setHorizontalAlignment(SwingConstants.RIGHT); + + description_f = new JTextField(); + description_f.setEditable(false); + description_f.setBounds(238, 99, 178, 129); + description_f.setColumns(10); + + lblKitchen = new JLabel("Kitchens:"); + lblKitchen.setBounds(23, 211, 70, 14); + lblKitchen.setHorizontalAlignment(SwingConstants.RIGHT); + + kitchens_f = new JTextField(); + kitchens_f.setEditable(false); + kitchens_f.setBounds(103, 202, 86, 20); + kitchens_f.setColumns(10); + + lblRooms = new JLabel("Rooms:"); + lblRooms.setBounds(23, 102, 70, 14); + lblRooms.setHorizontalAlignment(SwingConstants.RIGHT); + + rooms_f = new JTextField(); + rooms_f.setEditable(false); + rooms_f.setBounds(103, 99, 86, 20); + rooms_f.setColumns(10); + + lblLivings = new JLabel("Living rooms:"); + lblLivings.setBounds(30, 236, 63, 14); + lblLivings.setHorizontalAlignment(SwingConstants.RIGHT); + + lRooms_f = new JTextField(); + lRooms_f.setEditable(false); + lRooms_f.setBounds(103, 233, 86, 20); + lRooms_f.setColumns(10); + + lblParkings = new JLabel("Parkings:"); + lblParkings.setBounds(23, 174, 70, 14); + lblParkings.setHorizontalAlignment(SwingConstants.RIGHT); + + parkings_f = new JTextField(); + parkings_f.setEditable(false); + parkings_f.setBounds(103, 171, 86, 20); + parkings_f.setColumns(10); + + lblBaths = new JLabel("Baths:"); + lblBaths.setBounds(23, 143, 70, 14); + lblBaths.setHorizontalAlignment(SwingConstants.RIGHT); + + baths_f = new JTextField(); + baths_f.setEditable(false); + baths_f.setBounds(103, 140, 86, 20); + baths_f.setColumns(10); + contentPane.setLayout(null); + contentPane.add(lblParkings); + contentPane.add(parkings_f); + contentPane.add(lblRooms); + contentPane.add(rooms_f); + contentPane.add(lblBaths); + contentPane.add(baths_f); + contentPane.add(lblDistrict); + contentPane.add(District_f); + contentPane.add(lblLivings); + contentPane.add(lRooms_f); + contentPane.add(lblKitchen); + contentPane.add(kitchens_f); + contentPane.add(description_f); + contentPane.add(lblDescription); + parkings_f.setText(Integer.toString(rh.getFeatures().getnParkings())); + rooms_f.setText(Integer.toString(rh.getFeatures().getnRooms())); + baths_f.setText(Integer.toString(rh.getFeatures().getnBaths())); + District_f.setText(rh.getDistrict()); + kitchens_f.setText(Integer.toString(rh.getFeatures().getnKitchens())); + description_f.setText(rh.getDescription()); + lRooms_f.setText(Integer.toString(rh.getFeatures().getnLivings())); + JLabel lblAvailbleOffers = new JLabel("Availble Offers:"); + lblAvailbleOffers.setBounds(30, 286, 86, 14); + contentPane.add(lblAvailbleOffers); + JScrollPane scrollPane = new JScrollPane(); + scrollPane.setBounds(40, 311, 376, 183); + contentPane.add(scrollPane); + + table = new JTable(); + tableModel = new DefaultTableModel(null,new String[] {"Offer #", "FirstDay", "LastDay", "Price"}); + table.setModel(tableModel); + scrollPane.setViewportView(table); + + JButton btnBookSelected = new JButton("Book SelectedOffer"); + btnBookSelected.setBounds(127, 511, 178, 23); + contentPane.add(btnBookSelected); + + JLabel lblNewLabel = new JLabel("Green: Suit your dates. Red: Do not suit your dates"); + lblNewLabel.setEnabled(false); + lblNewLabel.setBounds(152, 277, 261, 23); + contentPane.add(lblNewLabel); + Enumeration rhs = rh.getAllOffers().elements(); + while(rhs.hasMoreElements()){ + Offer of = rhs.nextElement(); + Vector row = new Vector(); + row.add(of.getOfferNumber()); + row.add(of.getFirstDay()); + row.add(of.getLastDay()); + row.add(of.getPrice()); + tableModel.addRow(row); + + + } + table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer(){ + @Override + public Component getTableCellRendererComponent(JTable table, + Object value, boolean isSelected, boolean hasFocus, int row, int col) { + + super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col); + + Date firstDay = (Date) table.getModel().getValueAt(row, 1); + Date lastDay = (Date) table.getModel().getValueAt(row, 2); + if (FirstDay.before(firstDay)&&LastDay.after(lastDay)) { + setBackground(Color.GREEN); + setForeground(Color.BLACK); + } else { + setBackground(Color.RED); + setForeground(Color.BLACK); + } + return this; + } + }); + } +} diff --git a/ruralHouses/src/gui/ModifyHouseGUI.java b/ruralHouses/src/gui/ModifyHouseGUI.java index 737267e..497829e 100644 --- a/ruralHouses/src/gui/ModifyHouseGUI.java +++ b/ruralHouses/src/gui/ModifyHouseGUI.java @@ -65,7 +65,7 @@ public class ModifyHouseGUI extends JFrame { contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); - JLabel lblCode = new JLabel("House Code:"); + JLabel lblCode = new JLabel("House Name:"); lblCode.setHorizontalAlignment(SwingConstants.RIGHT); lblDistrict = new JLabel("District:"); diff --git a/ruralHouses/src/gui/QueryAvailabilityGUI.java b/ruralHouses/src/gui/QueryAvailabilityGUI.java deleted file mode 100644 index 557cca4..0000000 --- a/ruralHouses/src/gui/QueryAvailabilityGUI.java +++ /dev/null @@ -1,275 +0,0 @@ -package gui; - -import businessLogic.HouseManager; - -import com.toedter.calendar.JCalendar; - -import domain.Offer; -import domain.RuralHouse; - -import javax.swing.*; - -import java.awt.*; -import java.awt.event.*; -import java.beans.*; -import java.sql.Date; -import java.text.DateFormat; -import java.util.*; - -import javax.swing.table.DefaultTableModel; - - - - - -public class QueryAvailabilityGUI extends JFrame { -private static final long serialVersionUID = 1L; - - private JLabel jLabel1 = new JLabel(); - private JLabel jLabel2 = new JLabel(); - private JTextField jTextField2 = new JTextField(); - private JLabel jLabel3 = new JLabel(); - private JTextField jTextField3 = new JTextField(); - private JButton jButton1 = new JButton(); - private JButton jButton2 = new JButton(); - - // Code for JCalendar - private JCalendar jCalendar1 = new JCalendar(); - private Calendar calendarMio = null; - private JLabel jLabel4 = new JLabel(); - private JScrollPane scrollPane = new JScrollPane(); - private JComboBox comboBox ; - private JTable table; - private DefaultTableModel tableModel; - private final JLabel labelNoOffers = new JLabel(""); - private String[] columnNames = new String[] { - "Offer#", "Rural House", "First Day", "Last Day", "Price" - }; - - - - public QueryAvailabilityGUI() - { - - try - { - jbInit(); - } - catch(Exception e) - { - e.printStackTrace(); - } - - } - - private void jbInit() throws Exception - { - HouseManager houseM = new HouseManager(); - - - - Vector rhs=houseM.getAllRuralHouses(); - - comboBox = new JComboBox(rhs); - //comboBox.setModel(new DefaultComboBoxModel(rhs)); - - - this.getContentPane().setLayout(null); - this.setSize(new Dimension(433, 548)); - this.setTitle("Query availability"); - jLabel1.setText("Rural house code:"); - jLabel1.setBounds(new Rectangle(27, 20, 128, 25)); - jLabel2.setText("First day:"); - jLabel2.setBounds(new Rectangle(40, 55, 75, 25)); - jTextField2.setBounds(new Rectangle(190, 210, 155, 25)); - jTextField2.setEditable(false); - jLabel3.setText("Number of nights:"); - jLabel3.setBounds(new Rectangle(40, 250, 115, 25)); - jTextField3.setBounds(new Rectangle(190, 250, 155, 25)); - jTextField3.setText("0"); - jButton1.setText("Accept"); - jButton1.setBounds(new Rectangle(55, 455, 130, 30)); - jButton1.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - jButton1_actionPerformed(e); - } - }); - jButton2.setText("Close"); - jButton2.setBounds(new Rectangle(230, 455, 130, 30)); - - - jTextField3.addFocusListener(new FocusListener() - { - public void focusGained(FocusEvent e) - { - } - - public void focusLost(FocusEvent e) - { - jTextField3_focusLost(); - } - }); - jButton2.addActionListener(new ActionListener() - { - public void actionPerformed(ActionEvent e) - { - jButton2_actionPerformed(e); - } - }); - jLabel4.setBounds(new Rectangle(55, 300, 305, 30)); - jLabel4.setForeground(Color.red); - jCalendar1.setBounds(new Rectangle(190, 60, 225, 150)); - scrollPane.setBounds(new Rectangle(45, 305, 320, 116)); - - this.getContentPane().add(scrollPane, null); - - table = new JTable(); - table.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - int i=table.getSelectedRow(); - String houseName = (String) tableModel.getValueAt(i,1); - Date firstDate=new Date(((java.util.Date)tableModel.getValueAt(i,2)).getTime()); - Date lastDate=new Date(((java.util.Date)tableModel.getValueAt(i,3)).getTime()); - - BookRuralHouseGUI b=new BookRuralHouseGUI(houseName,firstDate,lastDate); - b.setVisible(true);} - }); - - scrollPane.setViewportView(table); - tableModel = new DefaultTableModel( - null, - columnNames); - - table.setModel(tableModel); - this.getContentPane().add(jCalendar1, null); - this.getContentPane().add(jLabel4, null); - this.getContentPane().add(jButton2, null); - this.getContentPane().add(jButton1, null); - this.getContentPane().add(jTextField3, null); - this.getContentPane().add(jLabel3, null); - this.getContentPane().add(jTextField2, null); - this.getContentPane().add(jLabel2, null); - this.getContentPane().add(jLabel1, null); - comboBox.setBounds(new Rectangle(245, 22, 115, 20)); - comboBox.setBounds(189, 22, 115, 20); - - getContentPane().add(comboBox); - labelNoOffers.setBounds(73, 432, 265, 14); - - getContentPane().add(labelNoOffers); - - // Codigo para el JCalendar - this.jCalendar1.addPropertyChangeListener(new PropertyChangeListener() - { - public void propertyChange(PropertyChangeEvent propertychangeevent) - { - if (propertychangeevent.getPropertyName().equals("locale")) - { - jCalendar1.setLocale((Locale) propertychangeevent.getNewValue()); - DateFormat dateformat = DateFormat.getDateInstance(1, jCalendar1.getLocale()); - jTextField2.setText(dateformat.format(calendarMio.getTime())); - } - else if (propertychangeevent.getPropertyName().equals("calendar")) - { - calendarMio = (Calendar) propertychangeevent.getNewValue(); - DateFormat dateformat1 = DateFormat.getDateInstance(1, jCalendar1.getLocale()); - jTextField2.setText(dateformat1.format(calendarMio.getTime())); - jCalendar1.setCalendar(calendarMio); - } - } - }); - - - } - - private void jButton2_actionPerformed(ActionEvent e) - { - this.setVisible(false); - } - - - private void jTextField3_focusLost() - { - try - { - new Integer (jTextField3.getText()); - jLabel4.setText(""); - } - catch (NumberFormatException ex) - { - jLabel4.setText("Error: Introduce a number"); - } - } - - private void jButton1_actionPerformed(ActionEvent e) - { - // House object - RuralHouse rh=(RuralHouse)comboBox.getSelectedItem(); - // First day - Date firstDay=new Date(jCalendar1.getCalendar().getTime().getTime()); - //Remove the hour:minute:second:ms from the date - firstDay=Date.valueOf(firstDay.toString()); - final long diams=1000*60*60*24; - long nights= diams * Integer.parseInt(jTextField3.getText()); - // Last day - Date lastDay= new Date((long)(firstDay.getTime()+nights)); - - try { - - - Vector v=rh.getOffers(firstDay, lastDay); - - Enumeration en=v.elements(); - Offer of; - tableModel.setDataVector(null, columnNames); - if (!en.hasMoreElements()) - labelNoOffers.setText("There are no offers at these dates"); - else { - labelNoOffers.setText("Select an offer if you want to book"); - - while (en.hasMoreElements()) { - of=en.nextElement(); - System.out.println("Offer retrieved: "+of.toString()); - Vector row = new Vector(); - row.add(of.getOfferNumber()); - row.add(of.getRuralHouse().getHouseName()); - - // Dates are stored in db4o as java.util.Date objects instead of java.sql.Date objects - // They have to be converted into java.sql.Date objects before - Date firstDaySqlDate = new Date(of.getFirstDay().getTime()); - Date lastDaySqlDate = new Date(of.getLastDay().getTime()); - row.add(firstDaySqlDate); - row.add(lastDaySqlDate); - row.add(of.getPrice()); - - - tableModel.addRow(row); - } - } - - - } catch (Exception e1) { - - labelNoOffers.setText(e1.getMessage()); - }} - private static void addPopup(Component component, final JPopupMenu popup) { - component.addMouseListener(new MouseAdapter() { - public void mousePressed(MouseEvent e) { - if (e.isPopupTrigger()) { - showMenu(e); - } - } - public void mouseReleased(MouseEvent e) { - if (e.isPopupTrigger()) { - showMenu(e); - } - } - private void showMenu(MouseEvent e) { - popup.show(e.getComponent(), e.getX(), e.getY()); - } - }); - } -} \ No newline at end of file diff --git a/ruralHouses/src/gui/QueryAvailabilityGUI2.java b/ruralHouses/src/gui/QueryAvailabilityGUI2.java index a12ad16..cdb3282 100644 --- a/ruralHouses/src/gui/QueryAvailabilityGUI2.java +++ b/ruralHouses/src/gui/QueryAvailabilityGUI2.java @@ -7,7 +7,6 @@ import java.util.*; import javax.swing.*; - import java.awt.*; import java.awt.event.*; @@ -44,7 +43,7 @@ public class QueryAvailabilityGUI2 extends JFrame { private final JLabel lblNewLabel = new JLabel(""); private final JRadioButton ruralHouseName = new JRadioButton( "Use RuralHouse name"); - private final JRadioButton district = new JRadioButton("Use district name"); + private final JRadioButton district = new JRadioButton("Use District Name"); private final ButtonGroup buttonGroup = new ButtonGroup(); private final JMenuBar menuBar = new JMenuBar(); private final JMenu mnMoreOptions = new JMenu("Search Options"); @@ -61,6 +60,7 @@ public class QueryAvailabilityGUI2 extends JFrame { private HouseManager houseMan = new HouseManager(); private final JLabel lblNumberOfLivings = new JLabel("Number of Livings:"); private final JTextField nLivings = new JTextField(); + private final JLabel feedback = new JLabel(""); public QueryAvailabilityGUI2() { nLivings.setText("0"); @@ -83,6 +83,7 @@ public class QueryAvailabilityGUI2 extends JFrame { jComboBox1 = new JComboBox(new DefaultComboBoxModel( Districs.longNames())); + jComboBox1.setEnabled(false); jComboBox1.setBounds(new Rectangle(115, 30, 115, 20)); jLabel2.setText("First day :"); jLabel2.setBounds(new Rectangle(20, 134, 85, 25)); @@ -94,9 +95,8 @@ public class QueryAvailabilityGUI2 extends JFrame { jTextField2.setEditable(false); jLabel4.setText("Rural House name:"); jLabel4.setBounds(new Rectangle(275, 30, 128, 20)); - jTextField3.setEnabled(false); jTextField3.setBounds(new Rectangle(413, 30, 115, 20)); - jButton1.setText("Accept"); + jButton1.setText("Search"); jButton1.setBounds(new Rectangle(60, 377, 165, 30)); jButton1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -191,7 +191,7 @@ public class QueryAvailabilityGUI2 extends JFrame { popupMenu.add(lblNumberOfLivings); popupMenu.add(nLivings); - + this.getContentPane().add(jCalendar2, null); this.getContentPane().add(jCalendar1, null); this.getContentPane().add(jLabel5, null); @@ -207,13 +207,12 @@ public class QueryAvailabilityGUI2 extends JFrame { lblNewLabel.setBounds(115, 301, 298, 38); getContentPane().add(lblNewLabel); - - district.setSelected(true); ; district.setBounds(20, 69, 128, 20); getContentPane().add(district); buttonGroup.add(ruralHouseName); buttonGroup.add(district); + ruralHouseName.setSelected(true); ruralHouseName.setBounds(276, 60, 177, 38); district.addItemListener(new ItemListener() { @Override @@ -221,8 +220,11 @@ public class QueryAvailabilityGUI2 extends JFrame { int state = e.getStateChange(); if (state == ItemEvent.SELECTED) { jComboBox1.setEnabled(true); + jCalendar1.setEnabled(false); + jCalendar2.setEnabled(false); } else if (state == ItemEvent.DESELECTED) { jComboBox1.setEnabled(false); + } } }); @@ -233,6 +235,8 @@ public class QueryAvailabilityGUI2 extends JFrame { int state = e.getStateChange(); if (state == ItemEvent.SELECTED) { jTextField3.setEnabled(true); + jCalendar1.setEnabled(true); + jCalendar2.setEnabled(true); } else if (state == ItemEvent.DESELECTED) { jTextField3.setEnabled(false); } @@ -243,6 +247,11 @@ public class QueryAvailabilityGUI2 extends JFrame { JLabel lblNewLabel_2 = new JLabel("District name:"); lblNewLabel_2.setBounds(20, 30, 85, 17); getContentPane().add(lblNewLabel_2); + feedback.setHorizontalAlignment(SwingConstants.CENTER); + feedback.setForeground(Color.RED); + feedback.setBounds(134, 413, 269, 17); + + getContentPane().add(feedback); setJMenuBar(menuBar); @@ -267,14 +276,31 @@ public class QueryAvailabilityGUI2 extends JFrame { listOfHousesGUI list = new listOfHousesGUI(houses); list.setVisible(true); } else if (this.ruralHouseName.isSelected()) { - // show features of specific house - // TODO + RuralHouse rh = houseMan.getHouseByName(jTextField3.getText()); + // The next instruction creates a java.sql.Date object from the date selected in the JCalendar object + Date firstDay=new Date(jCalendar1.getCalendar().getTime().getTime()); + // The next instruction removes the hour, minute, second and ms from the date + // This has to be made because the date will be stored in db4o as a java.util.Date object + // that would store those data, and that would give problems when comparing dates later + firstDay=Date.valueOf(firstDay.toString()); + + + Date lastDay=new Date(jCalendar2.getCalendar().getTime().getTime()); + //Remove the hour:minute:second:ms from the date + lastDay=Date.valueOf(lastDay.toString()); + if (rh != null) { + HouseFeaturesGUI hou = new HouseFeaturesGUI(rh,firstDay,lastDay); + hou.setVisible(true); + } else { + feedback.setText("Not matching houses"); + } } } private void jButton2_actionPerformed(ActionEvent e) { this.setVisible(false); } + private static void addPopup(Component component, final JPopupMenu popup) { component.addMouseListener(new MouseAdapter() { diff --git a/ruralHouses/src/gui/TableRowRenderingTip.java b/ruralHouses/src/gui/TableRowRenderingTip.java new file mode 100644 index 0000000..860db19 --- /dev/null +++ b/ruralHouses/src/gui/TableRowRenderingTip.java @@ -0,0 +1,135 @@ +package gui; + +import java.awt.*; +import javax.swing.*; +import javax.swing.table.*; +import javax.swing.border.*; + +public class TableRowRenderingTip extends JPanel +{ + public TableRowRenderingTip() + { + Object[] columnNames = {"Type", "Company", "Shares", "Price", "Boolean"}; + Object[][] data = + { + {"Buy", "IBM", new Integer(1000), new Double(80.5), Boolean.TRUE}, + {"Sell", "Dell", new Integer(2000), new Double(6.25), Boolean.FALSE}, + {"Short Sell", "Apple", new Integer(3000), new Double(7.35), Boolean.TRUE}, + {"Buy", "MicroSoft", new Integer(4000), new Double(27.50), Boolean.FALSE}, + {"Short Sell", "Cisco", new Integer(5000), new Double(20), Boolean.TRUE} + }; + + DefaultTableModel model = new DefaultTableModel(data, columnNames) + { + public Class getColumnClass(int column) + { + return getValueAt(0, column).getClass(); + } + }; + + JTabbedPane tabbedPane = new JTabbedPane(); + tabbedPane.addTab("Alternating", createAlternating(model)); + tabbedPane.addTab("Border", createBorder(model)); + tabbedPane.addTab("Data", createData(model)); + add( tabbedPane ); + } + + private JComponent createAlternating(DefaultTableModel model) + { + JTable table = new JTable( model ) + { + public Component prepareRenderer(TableCellRenderer renderer, int row, int column) + { + Component c = super.prepareRenderer(renderer, row, column); + + // Alternate row color + + if (!isRowSelected(row)) + c.setBackground(row % 2 == 0 ? getBackground() : Color.LIGHT_GRAY); + + return c; + } + }; + + table.setPreferredScrollableViewportSize(table.getPreferredSize()); + table.changeSelection(0, 0, false, false); + return new JScrollPane( table ); + } + + private JComponent createBorder(DefaultTableModel model) + { + + JTable table = new JTable( model ) + { + private Border outside = new MatteBorder(1, 0, 1, 0, Color.RED); + private Border inside = new EmptyBorder(0, 1, 0, 1); + private Border highlight = new CompoundBorder(outside, inside); + + public Component prepareRenderer(TableCellRenderer renderer, int row, int column) + { + Component c = super.prepareRenderer(renderer, row, column); + JComponent jc = (JComponent)c; + + // Add a border to the selected row + + if (isRowSelected(row)) + jc.setBorder( highlight ); + + return c; + } + }; + + table.setPreferredScrollableViewportSize(table.getPreferredSize()); + table.changeSelection(0, 0, false, false); + return new JScrollPane( table ); + } + + private JComponent createData(DefaultTableModel model) + { + JTable table = new JTable( model ) + { + public Component prepareRenderer(TableCellRenderer renderer, int row, int column) + { + Component c = super.prepareRenderer(renderer, row, column); + + // Color row based on a cell value + + if (!isRowSelected(row)) + { + c.setBackground(getBackground()); + int modelRow = convertRowIndexToModel(row); + String type = (String)getModel().getValueAt(modelRow, 0); + if ("Buy".equals(type)) c.setBackground(Color.GREEN); + if ("Sell".equals(type)) c.setBackground(Color.YELLOW); + } + + return c; + } + }; + + table.setPreferredScrollableViewportSize(table.getPreferredSize()); + table.changeSelection(0, 0, false, false); + table.setAutoCreateRowSorter(true); + return new JScrollPane( table ); + } + + public static void main(String[] args) + { + SwingUtilities.invokeLater(new Runnable() { + public void run() { + createAndShowGUI(); + } + }); + } + + public static void createAndShowGUI() + { + JFrame.setDefaultLookAndFeelDecorated(true); + JFrame frame = new JFrame("Table Row Rendering"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + frame.add( new TableRowRenderingTip() ); + frame.pack(); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + } +} diff --git a/ruralHouses/src/gui/listOfHousesGUI.java b/ruralHouses/src/gui/listOfHousesGUI.java index 0478466..0b6429b 100644 --- a/ruralHouses/src/gui/listOfHousesGUI.java +++ b/ruralHouses/src/gui/listOfHousesGUI.java @@ -31,7 +31,6 @@ import javax.swing.Box; public class listOfHousesGUI extends JFrame { private JPanel contentPane; - private JTextField textField; private JTable table; private DefaultTableModel tableModel; @@ -53,22 +52,14 @@ public class listOfHousesGUI extends JFrame { setContentPane(contentPane); contentPane.setLayout(null); - JLabel lblNewLabel = new JLabel("List of available houses in:"); + JLabel lblNewLabel = new JLabel(); lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 27)); - lblNewLabel.setBounds(23, 41, 325, 33); + lblNewLabel.setBounds(23, 41, 536, 33); contentPane.add(lblNewLabel); - - textField = new JTextField(); - textField.setEnabled(false); - textField.setEditable(false); - textField.setFont(new Font("Tahoma", Font.PLAIN, 27)); - textField.setBounds(373, 41, 152, 33); - contentPane.add(textField); - textField.setColumns(10); if (houses.isEmpty()) - textField.setText("No houses Matching"); + lblNewLabel.setText("There are not houses matching your search"); else - textField.setText(houses.get(0).getDistrict()); + lblNewLabel.setText("List of houses that match your search:"); JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(new Rectangle(45, 305, 320, 116)); scrollPane.setBounds(23, 113, 536, 271); @@ -80,7 +71,7 @@ public class listOfHousesGUI extends JFrame { "House Name", "Bedrooms", "Kitchens", "Baths", "Parkings", "Livings" }); //Maybe there is a better way to avoid interaction. - table.setEnabled(false); + //table.setEnabled(false); table.setModel(tableModel); Enumeration en = houses.elements(); RuralHouse rh; @@ -94,7 +85,6 @@ public class listOfHousesGUI extends JFrame { row.add(rh.getFeatures().getnBaths()); row.add(rh.getFeatures().getnParkings()); row.add(rh.getFeatures().getnLivings()); - System.out.println(rh.getFeatures().getnLivings()); tableModel.addRow(row); }