Java und Komponente Part2
zurück zu Java and Components Part 1 < -- --> Java and networking_1Mit reflections kann ein Objekt oder eine Klasse analysiert werden
Object obj
obj.getClass().getName();
//obj.getClass() liefert ein Objekt vom Typ Class
Class c
c.getSuperclass().getName();
//liefert Oberklasse
Class[ ] interfaces= c.getInterfaces(); //liefert interfaces
for(int i=0; i<interfaces.length;
i++)
{ System.out.print(interfaces[i].getName());
}
Constructor[
] constructors =
c.getDeclaredConstructors();
//liefert Konstruktoren
Field[ ] fields =
c.getDeclaredFields();
//liefert fields ->get- setMethoden
Method[ ] methods =
c.getDeclaredMethods();
//liefert methoden
einfache Serialisierung transient: Attribut wird nicht serialisiert
FileOutputStream
out =new FileOutputStream("date");
ObjectOutputStream s = new
ObjectOutputStream(out);
s.writeObject("Today");
s.writeObject(new Date());
s.flush();
FileInputStream
in = new FileInputStream("date");
ObjectInputStream s= new
ObjectInputStream(in);
String today = (String)s.readObject(); //Downcast von Object
Date date = (Date)s.readObject();
angepasste Serialisierung
public class blabla implements
Seralizable
private transient int size = 0; //transient
-> wird nicht serialisiert
//writeObject und readObject
geschrieben werden
private void writeObject(ObjectOutputStream
out) throws IOException
{ out.defaultWriteObject();
//do your own stuff }
private void readObject(ObjectInputStream
in) throws IOException
{ in.defaultReadObject();
//do your own stuff }
/**
* Dieser erste Satz wird in der Übersicht verwendet.
<br>
* Weiter kann man hier noch Sachen schreiben
*
*
@author silvio schneider
//author
* see <a href="{@docRoot}/hallo.html">
hallo</a> // tags mit { } können überall verwendet werden
* @depecated don't use this method //überholt
* {@link package.class#member label} //link
innerhalb der Dokumentation
* @param aObject an object to use //dokumentiert
einen Parameter
*
@return true oder
false
//dokumentiert den return wert
* @see Kapitel
37"
//text
* @see java.lang.Thread#suspend() //anker
* @serial, @serialData, @serialField //für serialsierung
*
@since @version ver1.0
//Versions-Text
* @throws, @exception
*/
public void method(Object aObject) { } //Javadoc für methode
Fünf Interfaces:
Collection
<- Set <-
SortedSet
//Elemente kommen nicht merfach vor
Collection
<-List
//geordnete Collection
Map <-
SortedMap
//Schlüssel/Wert-Paare
public interface Collection
{
int
size();
boolean
isEmpty();
boolean contains(Object element);
Boolean
add(Object
element);
boolean remove(Object element);
Boolean
addAll(Collection
c);
Iterator iterator();
}
public
interface
Iterator
readonly Wrapper:
{
boolean
HasNext();
unmodifiableCollection(Collection c)
Object next();
void remove(); //Optional
}
Implementationen
HashSet, TreeSet
ArrayList, LinkedList (doppelt verkettet,
zugriff mit ListIterator)
HashMap, TreeMap
Sortierreihenfolge
public interface
Comparator
{ int compare (Object o1,
Object o2); }
public class HelloBean implements Serializable{
//solte in der Regel serialisierbar sein
//Introspection erkundet public elemente
// no args Construktor // bassierend auf Reflection
public HelloBean() {text = "Hallo";
}
//Properites Eigenschaften der Bean
public T
getBlabla();
//t steht für Typ
public void setBlabla(T aValue);
//Events
Zustandsänderung der Bean
public void addBlablaListener(BlablaListener
lis);
public void removeBlablaListener(BlablaListener
lis)
//Bound-Properities
public void addPropertyChangeListener(PropertyChangeListener
pcl);
public void remove addPropertyChangeListener(PropertyChangeListener
pcl);
}
Visual Beans: extends java.awt.Component
Komponente: Event Handling, Properties, Methods, Interfaces, Persitence (serialization)
import javax.swing.*;
public class View
extends JFrame implements Observer
{
private JButton myButton;
public View(Count model)
{ super("hallo");
myButton = new JButton(""+model.getValue());
myButton.addActionListener(new IncListener(model));
getContentPane().add(myButton);
pack();
setVisible(true);
model.addObserver(this);
}
public void update(Observable
model, Object arg)
{ myButton = new JButton(""+((Count)model).getValue());
}
Swing besitzt eine Modle-View-Controller
(MVC) Architektur
Listener von EventListener ableiten,
allgemein nicht Threadsafe
public class CustomButton
extends JButton
{
public void paintComponent(Graphics g)
{ super.paintComponent(g) //paint Background
setOpaque(false);
// durchsichtig, kein Rechteck, z.B. Kreis
g.drawXY( );
//custom painting
}
}
Methoden des Graphics Objektes
setClip(int
x, int y, int width, int height) und
getClipBounds()
//Clipping Area
setFont(Font font) und getFont()
setColor(Color c) und getColor()
drawString(String str, int x, int y) //setStrocke(
Stil und dicke der Zeichenlinie)
drawRect(int x, int y, int width,
int height) und fillRect(�)
drawArc() und fillArc( )
Klasse Color für Farben z.B Color.blue
Schriften
Font(String name,
int style, int size)
FontStyle: Font.PLAIN, Font.BOLD,
Font.ITALIC
Font font = new Font("Serif"+ Font.BOLD + Font.ITALIC, 350);
Bilder
Toolkit toolkit
= Toolkit.getDefaultToolkit() ;
Imag duke1 = toolkit.createImage("duke.gif");
drawImage(Image img, int x, int y, ImageObserver observer)
GradientPaint: Farbübergang
TexturePaint: Muster
Koordinaten System:
User Space Geräteunabhängig
Device Space AusgabeGerät (Bildschirm,
Drucker)
zurück zu Java and Components Part 1 < -- oder --> gehe zu Java and networking_1