260 likes | 400 Views
public class Applet extends Panel public class JApplet extends Applet implements Accessible , RootPaneContainer public void init () public void start () public void stop () public void destroy () public void paint ( Graphics g) public void repaint ().
E N D
public class Applet extends Panel public class JApplet extends Appletimplements Accessible, RootPaneContainer • public void init() • public void start() • public void stop() • public void destroy() • public void paint(Graphics g) • public void repaint()
Alte metode ale clasei Applet • public AppletContextgetAppletContext() ; • public boolean isActive() ; • public URLgetDocumentBase(); • public URLgetCodeBase() ; • public StringgetParameter(String name) ; • public void resize(int width, int height) ; • public void showStatus(String msg) ; • public ImagegetImage(URL url,String numeF); • public AudioClipgetAudioClip(URL url,String numeF); • public StringgetAppletInfo() ;
Contextul unui aplet public interface AppletContext • AppletgetApplet(String name); • Enumeration<Applet> getApplets(); • void showDocument(URL url) ; • void showDocument(URL url, String target); • Target: "_self" , "_parent" , "_top" , "_blank" , name
Java Swing Caracteristici: • Bibliotecă Java , fără cod nativ • Comportare independentă de platformă • Personalizare • Prototipizarea interfeţei grafice • Componente reutilizabile – Beans • Utilizarea filosofiei MVC (Model View Controller)
Model View Controller Concept de proiectare a interfeţei grafice constând în structurarea unei componente în 3 părţi: modelul, aspectul, comportamentul • Modelul – conţine datele care se vizualizează sau stări ale vizualizării • Aspectul (vizualizarea) – rezumă aspectul grafic al componentei • Comportamentul – relevă modul de reacţie al componentei la stimuli externi
Look And Feel Prin LookAndFeel se defineste un stil grafic asociat interfetei grafice Java-Swing. Platforma standard Windows (jdk 1.7 Win) are definite patru stiluri: Metal, Motif, Windows și Nimbus Implementari de baza: public abstract class LookAndFeel extends Object; public abstract class BasicLookAndFeel extends LookAndFeel implements Serializable; public class MetalLookAndFeel extends BasicLookAndFeel; public class SynthLookAndFeel extends BasicLookAndFeel; // da posibilitatea crearii unui stil personalizat prin descrieri in fisiere XML public class NimbusLookAndFeel extends SynthLookAndFeel; Alte implementari: com.sun.java.swing.plaf.motif.MotifLookAndFeel com.sun.java.swing.plaf.windows.WindowsLookAndFeel
Gestionarea stilurilor se face prin metode statice ale clasei UIManager. Tipuri de operatiuni: Incarcarea plug-in-ului: public static void setLookAndFeel(LookAndFeel newLookAndFeel) throws UnsupportedLookAndFeelException public static void setLookAndFeel(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException; Informatii privind stilurile disponibile: public static StringgetCrossPlatformLookAndFeelClassName() public static StringgetSystemLookAndFeelClassName() public static UIManager.LookAndFeelInfo[] getInstalledLookAndFeels() public static ComponentUIgetUI(JComponent target) ; // intoarce referinta la un obiect care defineste stilul grafic pentru o componenta
UI Delegate Varianta MVC implementată în Swing constând în descrierea aspectului şi comportamentului împreună, într-o singură clasă numităDelegate. Rădăcina claselor Delegate ale componentelor Swing este descrisa in pachetul javax.swing.plaf: public abstract class ComponentUIextends Object; Clase derivate (abstracte): javax.swing.plaf.ButtonUI, javax.swing.plaf.LabelUI, ... Extensiile pentru aceste clase sunt facute pe stiluri grafice. Exemplu: public class MetalButtonUI extends BasicButtonUI; // extensia pentru buton facuta in pachetul javax.swing.plaf.metal Obţinerea unei referinţe la un obiect Delegate pentruo anumită componentă se face prin metoda statica createUI a clasei ComponentUI: public static ComponentUIcreateUI(JComponent c) ;
Componentele isi asociază un delegat prin metoda clasei JComponent: protected void setUI(ComponentUI newUI); Metoda face initializarea campului de tip ComponentUI (delegat) declarat la nivelul clasei JComponent: protected ComponentUIui; Metoda setUI este suprascrisa de clasele derivate. De exemplu pentru eticheta (JLabel) suprascrierea este facuta astfel: public void setUI(LabelUI ui){ super.setUI(ui); } Clasa JLabel (si celelalte derivate JComponent) are definite si metode care furnizeaza referinta la delegat sau schimba delegatul: public LabelUI getUI() { return (LabelUI)ui; } public void updateUI() { setUI((LabelUI)UIManager.getUI(this); }
Exemplu stabilire delegat Windows pentru o componentă JButton: JButton buton=new JButton("Buton"); buton.setUI((WindowsButtonUI)WindowsButtonUI.createUI(buton)); Actualizarea in cascada a stilului asociat unei componente se face printr-o metoda statica a clasei utilitare SwingUtilities : public static void updateComponentTreeUI(Component c); (exemplu - LookAndFeel)
Modelul de date Obiect care încapsulează datele componentei şi aparţine unei clase care implementează o interfaţă specifică tipului de model Obţinerea unei referinţe la modelul de date al unei componente se face prin metodagetModel() a componentei. Schimbarea modelului se face prin metodasetModel(modelNou). Modelele Swing sunt construite in majoritate respectand urmatoarele reguli de denominare: • Implementarea standard a modelului: “Default”+nume_model • Clasa adaptor asociata: “Abstract”+nume_model • Evenimente generate: nume_model+”Event” • Ascultatori: nume_model+”Listener”
Construirea modelelor proprii Sunt trei posibilitati de a construi un model propriu: Implementarea interfetei de baza a modelului. Prin aceasta modalitate se poate crea un model complet particularizat dar printr-un efort mare. Extinderea clasei adaptor (clasa Abstract). Este obligatorie doar implementarea metodelor abstract. Pot fi pastrate/modificate implementarile deja facute si pot fi adaugate noi functionalitati. Extinderea clasei Default. Nu este obligatorie implementarea vreunei functionalitati ci se pot face doar modificari/adaugari de functionalitate la modelul standard.
Model: DocumentComponente: toate componentele text public interface Document ; // interfata de baza public abstract class AbstractDocument extends Object implements Document, Serializable; // implementare de baza public class PlainDocument extends AbstractDocument; // implementarea standard Metoda care trebuie suprascrisa pentru o implmenetare particulara: public void insertString(int offs, String str, AttributeSet a) throws BadLocationException; // offs este pozitia la care se face insertia, str este sirul inserat, a reprezinta caracteristicile textului inserat
Gestiunea modificarilor de text public interface DocumentEvent; // Notificare asupra schimbarilor din text int getOffset(); // pozitia in care incepe o modificare int getLength(); // lungimea modificarii facute Document getDocument(); // intoarce modelul Document sursa public interface DocumentListener extends EventListener; Metode ale interfetei: void insertUpdate(DocumentEvent e); // trateaza inserarea in text void removeUpdate(DocumentEvent e); // trateaza stergerea din text void changedUpdate(DocumentEvent e) ; // modificare proprietati Gestiunea cursorului public interface CaretListener extends EventListener; // ascultator public abstract class CaretEvent extends EventObject; // Eveniment creat la schimbarea cursorului si/sau selectiei public abstract int getDot(); // pozitie cursor public abstract int getMark(); // preia pozitia ultimei selectii
JFormattedTextField Componenta utilizata in formatare şi validare date. Asocierea modelului cu un tip de dată se prin intermediul unor clase formator: DateFormatter, NumberFormater, MaskFormater - derivate din AbstractFormatter Constructori: public JFormattedTextField(); // Fara informatii de formatare. Aceste vor fi stabilite ulterior public JFormattedTextField(Format format); // Este furnizat sablonul pentru formator public JFormattedTextField(AbstractFormatter formatter); // Este furnizat formatorul public JFormattedTextField(AbstractFormatterFactory factory); // Este furnizat un creator/generator de formatori (factory). Metode al clasei: public void setFormatterFactory(AbstractFormatterFactory tf); // Stabileste un tip de generator de formatori atunci cand nu a fost specificat nici formatorul nici generatorul prin constructor public void setValue(Object value); // asociaza o valoare campului public Object getValue(); //intoarce valoarea asociata
Clasele de tip Format: public class SimpleDateFormat extends DateFormat; public SimpleDateFormat(String pattern); Exemple de caractere speciale folosite in construirea sablonului: d - zi in cadrul lunii, M - luna in cadrul anului, y - an calendaristic m - minute in ora, s - secunde in minut, H - ora in zi public class DecimalFormat extends NumberFormat; public DecimalFormat(String pattern); Exemple de caractere speciale: # - cifra, 0 - cifra inlusif 0 nesemnificativ, . - punct zecimal Clasele AbstractFormatter: public class MaskFormatter extends DefaultFormatter; // Construire formator dupa un sablon public MaskFormatter(String mask) throws ParseException; Exemplu de caractere speciale din sablon: # - cifre, U - orice litera, cu conversie la litere mari, L - orice litera, cu conversie la litere mici, A - orice cifra sau litera, ? - orice caracter, ' - character de evitare atunci cand sunt folosite caracterele speciale din sablon in interiorul mastii ca si caractere obisnuite
public class DateFormatter extends InternationalFormatter; // Formator de tip data public DateFormatter(DateFormat format); // se specifica in sablon de data public class NumberFormatter extends InternationalFormatter; public NumberFormatter(NumberFormat format); // se specifica un sablon numeric Metode Formatter public Class<?> getValueClass(); // Intoarce clasa obiectului editat/formatat public void setValueClass(Class<?> valueClass); // Stabileste clasa obiectului editat/formatat Acceptarea/neacceptarea introducerii de caractere invalide pe parcursul editarii este stabilita prin metoda : public void setAllowsInvalid(boolean allowsInvalid);
Generatori de formatori Generatorii sunt folositi atunci cand nu exista un formator asociat componentei. Sunt trei ipostaze in care este utilizat generatorul: - default - este utilizat atat in editare cat si in afisare daca lipsesc generatori pentru aceste situatii - editare - este utilizat in editare - afisare - este utilizat in afisare public class DefaultFormatterFactory extends JFormattedTextField.AbstractFormatterFactory implements Serializable; Constructori public DefaultFormatterFactory(JFormattedTextField.AbstractFormatter defaultFormat); // formatorul specificat este si pentru editare si pentru afisare public DefaultFormatterFactory(JFormattedTextField.AbstractFormatter defaultFormat, JFormattedTextField.AbstractFormatter displayFormat); // formatorul default este folosit pentru editare public DefaultFormatterFactory(JFormattedTextField.AbstractFormatter defaultFormat, JFormattedTextField.AbstractFormatter displayFormat, JFormattedTextField.AbstractFormatter editFormat); // cu toti formatorii
JTable Constructorii clasei: public JTable(); // sunt asociate modelele default pentru tabel, coloana si selectie public JTable(TableModel dm); // are asociat model de tabel si modele implicite pentru coloana si selectie public JTable(TableModel dm, TableColumnModel cm); // are asociat si un model de coloana public JTable(TableModel dm, TableColumnModel cm, ListSelectionModel sm); // are asociate modele public JTable(int numRows, int numColumns); // idem primul constructor, dar cu numar de linii si coloane specificate public JTable(Vector rowData, Vector columnNames); // model bazat pe un vector de linii si un vector cu numele coloanelor public JTable(Object[][] rowData, Object[] columnNames); // sunt specificate massive pentru valori si numele de coloane
JTable - principalele metode public int getRowCount(); public int getColumnCount(); public int getSelectedRow(); public int getSelectedColumn(); public String getColumnName(int column); public TableColumn getColumn(Object identifier); public Object getValueAt(int row, int column); public void setValueAt(Object aValue, int row, int column); public boolean isCellEditable(int row, int column); public void setAutoResizeMode(int mode); // specifica modul de comportare la redimensionare, cum este absorbita diferenta de latime de catre coloane AUTO_RESIZE_OFF - coloanele nu sunt redimensionate la redimensionarea tabelului AUTO_RESIZE_NEXT_COLUMN - se redimensioneaza coloana urmatoare AUTO_RESIZE_SUBSEQUENT_COLUMNS - se redimensioneaza uniform urmatoarele coloane AUTO_RESIZE_LAST_COLUMN - se redimensioneaza ultima AUTO_RESIZE_ALL_COLUMNS - se redimensioneaza uniform toate
Interfaţa TableModel Metode abstracte: public Class getColumnClass(int col); // intoarce clasa asociata coloanei public int getColumnCount(); // numarul de coloane public String getColumnName(int col); // numele coloanei public int getRowCount(); // numarul de linii public Object getValueAt(int lin, int col); // valoarea din celula specificata public boolean isCellEditable(int lin,int col); // este sau nu celula editabila public void removeTableModelListener(TableModelListener l); // stergere ascultator public void addTableModelListener(TableModelListener l); // adaugare ascultator public void setValueAt(Object val,int lin,int col); // stabileste valoare pentru celula
Clasa AbstractTableModel Metode abstracte: public int getRowCount(); public int getColumnCount(); public Object getValueAt(int lin,int col);
Implementarea implicita public class DefaultTableModel extends AbstractTableModel implements Serializable public DefaultTableModel() public DefaultTableModel(int rowCount, int columnCount) public DefaultTableModel(Vector columnNames, int rowCount) public DefaultTableModel(Object[] columnNames, int rowCount) public DefaultTableModel(Vector data, Vector columnNames) public DefaultTableModel(Object[][] data, Object[] columnNames)
JTable - Creare editori/rendereri Rendererii si editorii sunt obiecte utilizate pentru afisarea si editarea continutului celulelor. • Vizualizarea şi editarea celulelor • Renderer – componentă grafică ce implementează TableCellRenderer sau extinde DefaultTableCellRenderer • Editor – componentă grafică ce implementează TableCellEditor sau extinde DefaultCellEditor • Stabilire renderer şi editor (TableColumn) • public void setCellRenderer(TableCellRenderer cellRenderer) • public void setCellEditor(TableCellEditor cellEditor) • Preluare TableColumn (JTable) • public TableColumn getColumn(Object identifier) • public String getColumnName(int column)
Creare Renderer Prin implementarea interfetei: public interface TableCellRenderer; Metoda abstracta: Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column);// intoarce componenta desenata in celula; value este valoarea asociata celulei pentru a fi redata Prin extinderea clasei: public class DefaultTableCellRenderer extends JLabel implements TableCellRenderer, Serializable
Creare editor Prin implementarea interfetei: public interface TableCellEditor extends CellEditor; Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column); // stabileste o valoare initiala, value, pentru editor; intoarce componenta folosita pentru editare Prin extinderea implementarii standard: public class DefaultCellEditor extends AbstractCellEditor implements TableCellEditor, TreeCellEditor; Constructori DefaultCellEditor: public DefaultCellEditor(JCheckBox checkBox); public DefaultCellEditor(JComboBox comboBox); public DefaultCellEditor(JTextField textField);