package app.view;
import app.model.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.PropertyVetoException;
/**
* Vindu.java
*
* Vinduet oppretter interne vinduer
* Fungerer som et mellomledd mellom controller og indrevinduer.
* Har prøvd mest mulig å skille mvc. Controlleren trenger
* ikke detalj kunnskap om de indre vinduene, det har Vinduet.
*
* @author Hilde Vestøl (106288)
* @version 0.9
*/
public class Vindu extends JFrame {
private ActionListener lytter;
private MenyApp meny;
//private int låneID = 1000; //Skal senere komme fra DB
/**
*
* @param tittel
* @param lytter
*/
public Vindu(String tittel, ActionListener lytter) {
this.lytter = lytter;
this.meny = new MenyApp(lytter);
this.setTitle(tittel);
this.setMinimumSize(new Dimension(640, 480) );
this.setSize(640, 480);
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); //Bruker vinduslytter
this.setExtendedState(MAXIMIZED_BOTH); //Starter vinduet i "fullscreen"
this.setContentPane(new JDesktopPane()); //legger til desktop i vindu
this.addWindowListener((WindowListener)lytter);
setJMenuBar(meny);
}
/**
*
* @return
*/
public JDesktopPane getDesktop() {
return (JDesktopPane)this.getContentPane();
}
/**
* Metode for å finne hvilket internt vindu som er aktivt.
* Må vite hvilket vindu en skal kalle events på
*
* @return det aktive vinduet
*/
public InterntVindu getAktivtVindu() {
return (InterntVindu)getDesktop().getSelectedFrame();
}
/**
* Metode for å lukke interne vinduer.
*/
public void lukkInterneVinduer() {
if (this.getDesktop().getAllFrames().length == 0) {
this.dispose();
} else {
JInternalFrame[] frames = this.getDesktop().getAllFrames();
for (int i = 0; i < frames.length; i++) {
try {
//setter frame som selected for å forsikre meg om at dette
//vinduet er aktivt
frames[i].setSelected(true);
frames[i].doDefaultCloseAction();
} catch (PropertyVetoException pve) {
JOptionPane.showMessageDialog(null, pve);
}
}
}
} //end lukkInterneVinduer
/**
* En metode for å sette meny-elementer til enabled
* hvis et interntvindu er aktivt.
*/
public void enableMeny() {
meny.finnMenyValg("save").setEnabled(true);
meny.finnMenyValg("closeWindow").setEnabled(true);
meny.finnMenyValg("beregn").setEnabled(true);
}
/**
* En metode for å sette meny-elementer til disabled
* hvis et interntvindu IKKE er aktivt
*/
public void disableMeny() {
meny.finnMenyValg("save").setEnabled(false);
meny.finnMenyValg("closeWindow").setEnabled(false);
meny.finnMenyValg("beregn").setEnabled(false);
}
/**
* En metode som sjekker om Vinduet har et aktivt internt vindu
* For å unngå NullPointerException ved å trigge events fra menyen
* @return
*/
public boolean harAktivtVindu() {
if (getAktivtVindu() != null) {
return true;
}
return false;
}
/**
* Kaller metoden oppdaterAlleFelt i InterntVindu.
* Setter alle feltene til rett verdi i forhold til
* innholdet i lånet.
* @param lån
*/
public void oppdaterAlleFelt(Loan lån) {
if (getAktivtVindu() != null){
getAktivtVindu().oppdaterAlleFelt(lån);
}
}
/**
* Metode for å opprette ett internt vindu
*
* @param lån et låneobjekt
* @param tittel Navn på vinduet
* @return et internt vindu
*/
public InterntVindu opprettInterntVindu(Loan lån, String tittel) {
InterntVindu intern = new InterntVindu(tittel, lytter, lån);
intern.setVisible(true);
getDesktop().add(intern);
getDesktop().getDesktopManager().activateFrame(intern);
return intern;
}
/**************************************************************************
* Har en "kopi" av alle get-metoder fra internt vindu *
* På den måten har jeg skilt de indre delene av GUIet *
* og controlleren min. *
* Controlleren trenger kun å vite om metoder i klassen *
* Vindu. Vinduet skjenner til det InterneVinduet. *
**************************************************************************/
/**
*
* @return
*/
public Loan getLån() {
if (harAktivtVindu())
return getAktivtVindu().getLån();
return null;
}
/**
*
* @return
*/
public String getLåneID() {
if (harAktivtVindu())
return getAktivtVindu().getLåneID();
return "";
}
/**
*
* @return
*/
public String getLånebeløp() {
if (harAktivtVindu())
return getAktivtVindu().getLånebeløp();
return "";
}
/**
*
* @return
*/
public String getLøpetid() {
if (harAktivtVindu() )
return getAktivtVindu().getLøpetid();
return "";
}
/**
*
* @return
*/
public int getÅrligeTerminer() {
if (harAktivtVindu())
return getAktivtVindu().getÅrligeTerminer();
return 1; //1 er standard valg
}
/**
*
* @return
*/
public String getRentesats() {
if (harAktivtVindu())
return getAktivtVindu().getRentesats();
return "";
}
/**
*
* @return
*/
public int getLånetype() {
if (harAktivtVindu())
return getAktivtVindu().getLånetype();
return 1;
}
/**
*
* @return
*/
public JTextArea getTxtInfo() {
if (harAktivtVindu())
return getAktivtVindu().getTxtInfo();
return null;
}
/**************************************************************************
* Har en "kopi" av alle set-metoder fra internt vindu *
* På den måten har jeg skilt de indre delene av GUIet *
* og controlleren min. *
* Controlleren trenger kun å vite om metoder i klassen *
* Vindu. Vinduet skjenner til det InterneVinduet. *
**************************************************************************/
/**
*
* @param id
*/
public void setID(int id) {
if(harAktivtVindu())
if(getAktivtVindu().getLåneID().equals("") )
getAktivtVindu().setID(id); //skal senere komme fra DB
}
/**
*
* @param txt
*/
public void setID(String txt) {
if(harAktivtVindu())
getAktivtVindu().setID(txt);
}
/**
*
* @param beløp
*/
public void setBeløp(int beløp) {
if(harAktivtVindu())
getAktivtVindu().setBeløp(beløp);
}
/**
*
* @param txt
*/
public void setBeløp(String txt) {
if(harAktivtVindu())
getAktivtVindu().setBeløp(txt);
}
/**
*
* @param tid
*/
public void setLøpetid(int tid) {
if(harAktivtVindu())
getAktivtVindu().setLøpetid(tid);
}
/**
*
* @param txt
*/
public void setLøpetid(String txt) {
if(harAktivtVindu())
getAktivtVindu().setLøpetid(txt);
}
/**
*
* @param rente
*/
public void setRentesats (double rente) {
if(harAktivtVindu())
getAktivtVindu().setRentesats(rente);
}
/**
*
* @param txt
*/
public void setRentesats (String txt) {
if(harAktivtVindu())
getAktivtVindu().setRentesats(txt);
}
/**
*
* @param txt
*/
public void setInfoTxt(String txt) {
if(harAktivtVindu())
getAktivtVindu().setInfoTxt(txt);
}
/**
*
* @param farge
*/
public void setInfoTxt(Color farge) {
if(harAktivtVindu())
getAktivtVindu().setInfoTxt(farge);
}
} // end class Vindu
import app.model.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.PropertyVetoException;
/**
* Vindu.java
*
* Vinduet oppretter interne vinduer
* Fungerer som et mellomledd mellom controller og indrevinduer.
* Har prøvd mest mulig å skille mvc. Controlleren trenger
* ikke detalj kunnskap om de indre vinduene, det har Vinduet.
*
* @author Hilde Vestøl (106288)
* @version 0.9
*/
public class Vindu extends JFrame {
private ActionListener lytter;
private MenyApp meny;
//private int låneID = 1000; //Skal senere komme fra DB
/**
*
* @param tittel
* @param lytter
*/
public Vindu(String tittel, ActionListener lytter) {
this.lytter = lytter;
this.meny = new MenyApp(lytter);
this.setTitle(tittel);
this.setMinimumSize(new Dimension(640, 480) );
this.setSize(640, 480);
this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); //Bruker vinduslytter
this.setExtendedState(MAXIMIZED_BOTH); //Starter vinduet i "fullscreen"
this.setContentPane(new JDesktopPane()); //legger til desktop i vindu
this.addWindowListener((WindowListener)lytter);
setJMenuBar(meny);
}
/**
*
* @return
*/
public JDesktopPane getDesktop() {
return (JDesktopPane)this.getContentPane();
}
/**
* Metode for å finne hvilket internt vindu som er aktivt.
* Må vite hvilket vindu en skal kalle events på
*
* @return det aktive vinduet
*/
public InterntVindu getAktivtVindu() {
return (InterntVindu)getDesktop().getSelectedFrame();
}
/**
* Metode for å lukke interne vinduer.
*/
public void lukkInterneVinduer() {
if (this.getDesktop().getAllFrames().length == 0) {
this.dispose();
} else {
JInternalFrame[] frames = this.getDesktop().getAllFrames();
for (int i = 0; i < frames.length; i++) {
try {
//setter frame som selected for å forsikre meg om at dette
//vinduet er aktivt
frames[i].setSelected(true);
frames[i].doDefaultCloseAction();
} catch (PropertyVetoException pve) {
JOptionPane.showMessageDialog(null, pve);
}
}
}
} //end lukkInterneVinduer
/**
* En metode for å sette meny-elementer til enabled
* hvis et interntvindu er aktivt.
*/
public void enableMeny() {
meny.finnMenyValg("save").setEnabled(true);
meny.finnMenyValg("closeWindow").setEnabled(true);
meny.finnMenyValg("beregn").setEnabled(true);
}
/**
* En metode for å sette meny-elementer til disabled
* hvis et interntvindu IKKE er aktivt
*/
public void disableMeny() {
meny.finnMenyValg("save").setEnabled(false);
meny.finnMenyValg("closeWindow").setEnabled(false);
meny.finnMenyValg("beregn").setEnabled(false);
}
/**
* En metode som sjekker om Vinduet har et aktivt internt vindu
* For å unngå NullPointerException ved å trigge events fra menyen
* @return
*/
public boolean harAktivtVindu() {
if (getAktivtVindu() != null) {
return true;
}
return false;
}
/**
* Kaller metoden oppdaterAlleFelt i InterntVindu.
* Setter alle feltene til rett verdi i forhold til
* innholdet i lånet.
* @param lån
*/
public void oppdaterAlleFelt(Loan lån) {
if (getAktivtVindu() != null){
getAktivtVindu().oppdaterAlleFelt(lån);
}
}
/**
* Metode for å opprette ett internt vindu
*
* @param lån et låneobjekt
* @param tittel Navn på vinduet
* @return et internt vindu
*/
public InterntVindu opprettInterntVindu(Loan lån, String tittel) {
InterntVindu intern = new InterntVindu(tittel, lytter, lån);
intern.setVisible(true);
getDesktop().add(intern);
getDesktop().getDesktopManager().activateFrame(intern);
return intern;
}
/**************************************************************************
* Har en "kopi" av alle get-metoder fra internt vindu *
* På den måten har jeg skilt de indre delene av GUIet *
* og controlleren min. *
* Controlleren trenger kun å vite om metoder i klassen *
* Vindu. Vinduet skjenner til det InterneVinduet. *
**************************************************************************/
/**
*
* @return
*/
public Loan getLån() {
if (harAktivtVindu())
return getAktivtVindu().getLån();
return null;
}
/**
*
* @return
*/
public String getLåneID() {
if (harAktivtVindu())
return getAktivtVindu().getLåneID();
return "";
}
/**
*
* @return
*/
public String getLånebeløp() {
if (harAktivtVindu())
return getAktivtVindu().getLånebeløp();
return "";
}
/**
*
* @return
*/
public String getLøpetid() {
if (harAktivtVindu() )
return getAktivtVindu().getLøpetid();
return "";
}
/**
*
* @return
*/
public int getÅrligeTerminer() {
if (harAktivtVindu())
return getAktivtVindu().getÅrligeTerminer();
return 1; //1 er standard valg
}
/**
*
* @return
*/
public String getRentesats() {
if (harAktivtVindu())
return getAktivtVindu().getRentesats();
return "";
}
/**
*
* @return
*/
public int getLånetype() {
if (harAktivtVindu())
return getAktivtVindu().getLånetype();
return 1;
}
/**
*
* @return
*/
public JTextArea getTxtInfo() {
if (harAktivtVindu())
return getAktivtVindu().getTxtInfo();
return null;
}
/**************************************************************************
* Har en "kopi" av alle set-metoder fra internt vindu *
* På den måten har jeg skilt de indre delene av GUIet *
* og controlleren min. *
* Controlleren trenger kun å vite om metoder i klassen *
* Vindu. Vinduet skjenner til det InterneVinduet. *
**************************************************************************/
/**
*
* @param id
*/
public void setID(int id) {
if(harAktivtVindu())
if(getAktivtVindu().getLåneID().equals("") )
getAktivtVindu().setID(id); //skal senere komme fra DB
}
/**
*
* @param txt
*/
public void setID(String txt) {
if(harAktivtVindu())
getAktivtVindu().setID(txt);
}
/**
*
* @param beløp
*/
public void setBeløp(int beløp) {
if(harAktivtVindu())
getAktivtVindu().setBeløp(beløp);
}
/**
*
* @param txt
*/
public void setBeløp(String txt) {
if(harAktivtVindu())
getAktivtVindu().setBeløp(txt);
}
/**
*
* @param tid
*/
public void setLøpetid(int tid) {
if(harAktivtVindu())
getAktivtVindu().setLøpetid(tid);
}
/**
*
* @param txt
*/
public void setLøpetid(String txt) {
if(harAktivtVindu())
getAktivtVindu().setLøpetid(txt);
}
/**
*
* @param rente
*/
public void setRentesats (double rente) {
if(harAktivtVindu())
getAktivtVindu().setRentesats(rente);
}
/**
*
* @param txt
*/
public void setRentesats (String txt) {
if(harAktivtVindu())
getAktivtVindu().setRentesats(txt);
}
/**
*
* @param txt
*/
public void setInfoTxt(String txt) {
if(harAktivtVindu())
getAktivtVindu().setInfoTxt(txt);
}
/**
*
* @param farge
*/
public void setInfoTxt(Color farge) {
if(harAktivtVindu())
getAktivtVindu().setInfoTxt(farge);
}
} // end class Vindu