- Stahuj zápisky z přednášek a ostatní studijní materiály
- Zapisuj si jen kvalitní vyučující (obsáhlá databáze referencí)
- Nastav si své předměty a buď stále v obraze
- Zapoj se svojí aktivitou do soutěže o ceny
- Založ si svůj profil, aby tě tví spolužáci mohli najít
- Najdi své přátele podle místa kde bydlíš nebo školy kterou studuješ
- Diskutuj ve skupinách o tématech, které tě zajímají
Studijní materiály
Zjednodušená ukázka:
Stáhnout celý tento materiálné dodržování normy IEEE 754, byť hardware
umožňuje více
Pro čísla s libovolnou přesností:
java.math.BigInteger - celá čísla
java.math.BigDecimal - desetinná reálná čísla Znakové a řetězové literály Znakový literál představuje právě jeden znak v Unicodu a uvádí se v apostrofech,
např.: 'A' 'Ř' '@'
Lze ho vyjádřit až čtyřmi hexadecimálními číslicemi uvozenými prefixem \u ,
např.: '\uCafe'
Řetězový literál je posloupnost znaků Unicodu ( i prázdná ) v uvozovkách,
např.: "Abc123" "Řeřicha" "@" "" .
Lze vkládat i znaky Unicodu,
např.: "My \uCafe & Tea" .
Řetěz není primitivní typ – je referenčního typu java.lang.String. Operátory = přiřazení
+ - sčítání / odčítání aritmetické nebo unární plus / minus
++ -- inkrement / dekrement pre a post
násobení
/ dělení, integrální dělení jsou-li oba operandy integrálních typů
modulo, tj. zbytek po dělení
> >>> posun vlevo/vpravo aritmetický resp. logický –
jen int a long. Posun o k%32 resp. k%64 pro int resp. long.
+ zřetězení – je-li alespoň jeden operand řetěz
instanceof - test referenčního typu
(data type) - přetypování Přiřazovací operátory = += -= = /= = = >>>= &= ^= |=
Složený operátor je jen zkratka zápisu, např.:
x += 2; je ekvivalentní x = x + 2;
Pro přiřetězení lze použít též s += “XYZ”;
Přiřazovací operátory jsou zprava asociativní, tedy výraz
a = b = c je ekvivalentní a = ( b = c )
Na levé straně přiřazovacího operátoru musí být proměnná.
Výsledkem přiřazení je hodnota proměnné po provedeném přiřazení a proto je následující příklad chybný:
double d;
int i = d = 10;
// Error: possible loss of precision: double, required int Ternární podmíněný výraz Operátor ? : vrací hodnotu jednoho nebo druhého výrazu podle hodnoty boolského výrazu:
int abs(int i) { return i >= 0 ? i : - i; }
Podmíněný operátor je zprava asociativní, takže
a ? b : c ? d : e ? f : g
znamená toto:
a ? b : (c ? d : (e ? f : g))
První operand musí být typu boolean.
Druhý a třetí operand musejí být kompatibilního typu. Výsledek podmíněného operátoru je zkonvertován na "obecnější" z obou typů:
double d;
boolean zaokrouhlit;
…
return zaokrouhlit ? Math.round(d) : d;
// vraci hodnotu typu double Komparační operátory Výsledkem porovnání je logická hodnota ( true, false )
Porovnání primitivních typů
== != rovno, nerovno
> >= větší než, větší nebo rovno
< < APPLET CODE= yyy.class CODEBASE=...
NAME=B WIDTH=... HEIGHT=... ALIGN=... > < PARAM NAME=... VALUE=... > < PARAM NAME=... VALUE=... > Tomcat Hi ! < HTML > A B HTML stránka s applety blablablablablablablablabla Applety Bytekód appletu se zpravidla prezentuje vizuálně v okénku ( případně i
akusticky ).
Aby applet nemohl škodit klientskému počítači má standardně omezené
možnosti - nemůže:
přistupovat k lokálním souborům,
zjišťovat a měnit vlastnosti systému,
vytvářet knihovny a definovat nativní metody,
spouštět programy,
navazovat komunikaci s třetí stranou.
Tato omezení může klient lze zmírnit svojí politikou ( policy ) – udělením
tzv. grantů specificky na určené operace.
Konstrukce appletu Applety jsou potomky třídy java.applet.Applet resp. javax.swing. JApplet.
Prohlížeč vytvoří instanci stáhnuté třídy - může k tomu však použít pouze
její konstruktor bez parametrů - jímž tedy nelze instanci parametrizovat.
To lze pomocí značek
( Nevolá ani metodu main( String[ ] args )
Třídy Applet a JApplet neobsahují žádné přípravy k animacím ( Thread,
Runnable, run() apod. ) Ty je případně třeba dodělat v potomcích.
Ke konstrukci je nutný balíček java.applet s třídou Applet a interfejsy:
AudioClip - s metodami play(), loop(), stop()
AppletContext – pro popis prostředí appletu, tj. dokumentu v němž se nalézá a pro přístup k dalším appletům.
AppletStub – pro návaznost na browser Panel java.awt Applet RootPane
Container JApplet javax.swing Container java.awt Component java.awt Accessible ImageObserver MenuContainer Accessible AppletContext AudioClip AppletStub Object java.lang java.applet Třída java.applet.Applet Applet má jediný konstruktor bez parametrů.
Čtyři prázdné metody volá browser ( nikoli programátor ) a to při:
public void init( ) - inicializace, supluje činnost konstruktoru
public void start( ) – znovuobjevení appletu, start animací
public void stop( ) – skrytí appletu, zastavení animací
public void destroy( ) – zrušení appletu, uvolnění zdrojů
public String getParameter( String key ) – získání hodnoty z PARM
public URL getCodeBase( ) – získání lokace bytekódu
public URL getDocumentBase( ) – získání lokace HTML stránky
public AppletContext getAppletContext ( )
public Image getImage( URL u, String name ) – stažení obrázků
public void showStatus( String msg ) – zápis do stavové řádky
Třída java.applet.Applet public AccessibleContext getAccessibleContext ( ) - kontext
public String getAppletInfo ( ) – pro popis appletu
public String[ ] [ ] getParameterInfo( ) – pro popis vstupních parametrů
public static final AudioClip getAudioClip( URL u ) – stažení zvuku
public AudioClip getAudioClip( URL u, String name ) – stažení zvuku
public void play( URL u, String name ) – přehrání zvuku
public Locale getLocale( ) – získání místních specifik
public void resize( … ) – změna velikosti okénka
public boolean isActive( ) – aktivita
public void setStub( AppletStub stub ) Třída javax.swing.JApplet Tato třída obohacuje applet o možnost vrstvení, zasklení a menu.
protected JRootPane createRootPane( )
get/set RootPane, ContentPane, GlassPane, LayeredPane
get/set JMenuBar
přepisuje metody:
public void update( Graphics g )
public void remove( Component comp ) Interfejs java.applet.AppletContext Tento interfejs umožňuje přístup k prohlížeči
public Applet getApplet( String name ) – přístup k appletu na stránce.
public Enumeration getApplets( ) – výčet appletů na stránce z téhož hostu.
public AudioClip getAudiolip( URL u ) – stažení zvuku
public Image getImage( URL u ) – stažení obrázku
public void showDocument( URL u, String target ) – ukázání další stránky
v definovené okně target.
public void showStatus( String status ) – ukázání stavu
Pro práci se streamy slouží:
public Iterator getStreamKeys( )
public InputStream getStream( String key )
public void setStream( String key, InputStream is )
appletviewer
Je standardní tester appletů dodávaný v j2sdk/bin/
Jeho vstupem je HTML-stránka s extenzí .html nebo .htm .
Avšak interpretuje jen úsek ...
Umožňuje testovat chování při volání jeho metod z browseru
init - start – paint
stop
start – paint
stop - destroy
A.html package proj;
class X { .. } somedirectory < APPLET
CODEBASE = classes
CODE = “proj.X.class”
/proj /classes A.html somedirectory < APPLET
CODEBASE =
“http://server/... /far/classes”
CODE = “proj.X.class”
/proj /classes server/... /far X.class package proj;
class X { .. } X.class /images GIF Code a Document Syntax tagu APPLET < APPLET
{ CODE = appletFile | OBJECT = objectFile }
[CODEBASE = codebaseURL] default is dot.
WIDTH = pixels
HEIGHT = pixels
[ARCHIVE = "file1, file2" ] preloaded
[NAME = appletInstanceName]
[ALIGN = alignment]
[VSPACE = pixels]
[HSPACE = pixels]
[ALT = alternateText]
>
[< PARAM NAME = parameter1 VALUE = value1 >]
[< PARAM NAME = parameter2 VALUE = value2 >]
. . .
[alternateHTML]
Applet i aplikace Hlavní rozdíl mezi appletem a aplikací je jiný způsob použití a spouštění –
vlastní program se liší jen okrajově.
Lze vytvářet programy, které se mohou chovat jako aplikace i jako aplikace.
Applet i JApplet jsou potomci java.awt.Panelu, lze tak s nimi nakládat v
aplikacích. Nutno však zavolat metodu init( ) a start( ) aby provedly činnosti
v nich definované.
Způsob předání parametrů je v obou případech různý – což je třeba
vyřešit v úvodu programu.
Případné ovládání metod start( ), stop( ) a destroy ( ) musí vyřešit aplikace. Program jako applet i aplikace (1/2) class Program extends Applet {
boolean isStandalone = false;
String var = null;
public String getParameter( String key, String default ) { // aux. method
return isStandalone ?
System.getProperty( key, default ) :
getParameter( key ) != null ? // inherited method call
getParameter( key ) : // inherited method call
default ;
}
public void init( ) {
var = this.getParameter(“KEY", “XYZ"); // aux. method call
}
public void start( ) { ... } Program jako applet i aplikace (2/2) public static void main( String[ ] args ) {
Program pgm = new Program( );
pgm.isStandalone = true;
Frame frame = new Frame( “Frame with Applet“ );
frame.add( pgm, BorderLayout.CENTER );
pgm.init( );
pgm.start( );
frame.setBounds( ... );
frame.setVisible( true );
}
} // end of Program
Program bude mít v proměnné var řetěz ABC. Spustí se jako
aplikace takto: java Program –DKEY=ABC
applet takto: appletviewer program.html
přičemž uvnitř bude Další možnosti
Applet může ke komunikaci používat také Frame, JFrame, Dialog,
FileDialog či JFileChooser a jejich potomky. Double buffering class MyApplet extends Applet {
Graphics bufferGraphics;
Image offscreen;
Dimension dim;
public void init( ) {
dim = this.getSize();
offscreen = createImage( dim.width, dim.height );
bufferGraphics = offscreen.getGraphics( );
}
public void update( Graphics g ) { paint( g ); }
public void paint( Graphics g ) {
bufferGraphics.clearRect( 0, 0, dim.width, dim.width ); bufferGraphics.setColor( … ); bufferGraphics.fillRect( … ); g.drawImage( offscreen, 0, 0, this );
}
} Archive Parametr ARCHIVE umožňuje appletu stáhnout další soubory a balíčky v komprimované formě jar nebo zip .
To je výhodné, neboť přenos je hromadný a kratší.
APPLET = “ file1, file2, ... “
Žel, některé prohlížeče tuto možnost interpretují poněkud jinak Verze prohlížečů
Windows XP/SP2
Netscape 7.02 a MSIE 6.0:
Nevolá start/stop při iconifikaci/deiconifikaci
Při reload volá stop-destroy-constructor-init-start
stop-destroy při přechodu na jinou stránku či ukončení prohlížeče
Parametry WIDTH a HEIGHT mohou být i nekladné:
MSIE 6.0: nekladný parametr změní na hodnotu 1
Netscape 7.02: nulové rozměry okénka
Obrázky Java podporuje práci s obrázky ( images ) a ikonami ( icons ) balíčky:
java.applet
java.awt ~.image ~.renderable
javax.swing
javax.imageio ~.event ~.metadata ~.plugins.jpeg ~.spi ~.stream
~.plugins.bmp ( od verze 1.5 )
Obrázky jsou zakódované soubory pixelů uložené lokálně či na síti,
bývají dosti rozsáhlé a v různých formátech. Podporují se formáty: JPEG,
PNG, BMP, WBMP, GIF ( jen čtení ).
Stahování, zpracování,vykreslení ( rendering ) či zápis je náročné.
Programátor nemá přímý přístup k obrazové paměti.
Využívá se multithreadová a proudová taktika.
Obrázky a zvuky jsou bezpečné objekty, neboť nemohou počítač narušit. ImageConsumer ImageProducer Pixel
Grabber Buffered
ImageFilter Image
Filter Crop
ImageFilter Replicate
ScaleFilter AreaAveraging
ScaleFilter GrayFilter javax.swing Filtered
ImageSource Memory
ImageSource Renderable
ImageProducer RenderedImage Writable
RenderedImage Buffered
Image Image java.awt Volatile
Image ImageObserver RGB
ImageFilter Component java.awt Runnable RenderableImage Renderable
ImageOp ContextualRendered
ImageFactory lRendered
ImageFactory java.awt.image ColorModel Transparency RasterOp BufferedImageOp java.awt Affine
TransformOp Band
CombineOp LookupOp RescaleOp ConvolveOp Color
ConvertOp Component
ColorModel Index
ColorModel Packed
ColorModel Direct
ColorModel Sample
Model Component
SampleModel MultiPixelPacked
SampleModel SinglePixelPacked
SampleModel Banded
SampleModel PixelInterleaved
SampleModel java.awt.image Writable
Raster Raster Data
Buffer DataBuffer
Byte DataBuffer
Double DataBuffer
Float DataBuffer
Int DataBuffer
Short DataBuffer
UShort Kernel Buffer
Strategy Lookup
Table ByteLookup
Table ShortLookup
Table TileObserver java.awt.image IIOImage Image
Reader IIOParam Image
ReadParam Image
WriteParam IIOParamController ImageTrancoder JPEGImage
ReadParam JPEGImage
WriteParam Image
Writer JPEGQT JPEG
HuffmanTable ~.plugins.jpeg javax.imageio a javax.imageio.plugins.jpeg IIOByte
Buffer ImageInput
StreamImpl FileCacheImage
InputSream FileImage
InputSream Image
InputStream DataInput ImageOutput
StreamImpl Image
OutputStream DataOutput MemoryCache
ImageInputSream FileCacheImage
OutputSream FileImage
OutputSream MemoryCache
ImageOutputSream javax.imageio.stream Vykreslení obrázku public class ImageLoad extends Frame {
Toolkit tk = Toolkit.getDefaultToolkit( );
Image img1 = tk.getImage( "C:\\...\\im1.gif" );
Image img2 = tk.getImage( new URL("http:\\...\\im2.jpeg“) );
int x1=…, y1=…, x2=…, y2=…, w2=…, h2=… ;
public ImageLoad( ) throws Exception {
MediaTracker mt = new MediaTracker( this );
mt.addImage( img1, 123 ); // unique id is also priority
mt.addImage( img2, 456 ); // unique id is also priority
mt.waitForAll( );
this.setBounds( 100, 100, 200, 200 );
this.setVisible( true );
}
public void paint( Graphics g ) {
g.drawImage( img1, x1, y1, this );
g.drawImage( img2, x2, y2, w2, h2, this );
}
} .gif .jpg
.png void g.drawImage( im, ... , observer ) tk.getImage( string / url ) ToolKit Image boolean imageUpdate( im, flags, x, y, w, h ) {
.... } notification java.awt.image.Observer flags:
ABORT – zrušeno před dokončením
ALLBITS – úspěšně dokončeno
ERROR & ABORT – chyba a zrušení
FRAMEBITS – část dokončena
HEIGHT – výška již známa
PROPERTIES – vlastnosti již známy
SOMEBITS – potřebny další bity
WIDTH – šířka již známa int[ ] A R G B Memory
ImageSource Component.
createImage( ) Pixel
Grabber Image height width 0 – transparent
255 - opaque Image a pole pixelů Image Producer, Consumer, Filter Applet ap; Toolkit tk; Image im;
ImageProducer prod; ImageConsumer cons; ImageFilter filter;
im = Component.createImage( prod ); // vytvoření
im = ap.getImage( url ); // získání v apletu
im = tk.getImage( url ); // získání v aplikaci
prod = im.getSource( );
prod = new FilteredImageSource( prod, filter );
prod = new MemoryImageSource( w, h, pix[ ], off, scan );
cons = new PixelGrabber( im, x, y, w, h, pix[ ], off, scan );
cons.grabPixels(); // spuštění
filter = new CropImageFilter( x, y, w, h );
filter = new MyRGBFilter( ... ); // potomek RGBFilteru Filtrování Image im0;
ImageProducer prod0 = im0.getSource( );
ImageFilter filter1 = new CropImageFilter( 50, 50, 100, 100 );
ImageProducer prod1 = new FilteredImageSource( prod0, filter1 );
ImageFilter filter2 = new MyRGBFilter( ... );
ImageProducer prod2 = new FilteredImageSource( prod1, filter2 );
Image im2 = Component.createImage( prod2 );
class MyRGBFilter extends RGBImageFilter {
int anotherRGB;
public MyRGBFilter( ... ) { ... }
public int filterRGB( int x, int y, int rgb ) {
...
return anotherRGB;
}
} Rovinná geometrie Podpora geometrie v awt je příliš jednoduchá - jen s hodnotami typu int.
Balíčky java.awt.geom a java.awt umožňují hodnoty float a double.
To umožňují dvojice statických vložených ( nested ) tříd .Float a .Double
definované v abstraktních třídách Point2D, Line2D, Rectangle2D atd.
Počítání probíhá v typu double, typ float je jen pro úporu paměti.
Pro vykreslení slouží abstraktní třída Graphics2D, kterou přetypováním
lze získat např. takto:
Rectangle2D r = new Rectangle2D.Double(10.1, 22.2, 33.3, 535.5 );
public void paint( Graphics g ) {
Graphics2D g2 = ( Graphics2D ) g;
g2.draw( r );
} Shape Polygon Area Rectangle General
Path Line2D Cubic
Curve2D Rectangular
Shape Quad
Curve2D Arc2D Ellipse2D Rectange2D Round
Rectange2D Point Point2D Dimension Dimension
2D Affine
Transform PathIterator Flattening
PathIterator Graphics
2D Graphics - static nested classes .Double .Float java.awt java.awt.geom Interfejs Shape ( útvar ) Obecně definuje metody geometrického útvaru :
boolean contains( ... ) – zjistit zda obsahuje bod či obdélník.
Rectangle getBounds( ... ) – omezující obdélník.
PathIterator getPathIterator( ... ) – získání iterátoru.
boolean intersects( Rectangle2D r ) – zjistit průnik s obdélníkem.
Pro posouzení vnitřku se implicitně Shape chápe jako Area. Třída GeneralPath Tato finální třída umožňuje vytvořit obecnou, orientovanou křivku ( a to i
nesouvislou ) z lineárních, kvadratických, kubických (Bézierových) a
segmentů typu Shape, tj. různých útvaru a obrazců.
Dále umožňuje:
void append( PathIterator pi, boolean connect ) – přidání segments.
void append( Shape s, boolean connect ) – přidání útvaru.
void closePath() - křivku uzavřít.
boolean contains( ... ) – zjistit zda obsahuje bod či obdélník.
Rectangle getBounds( ... ) – omezující obdélník.
boolean intersects( Rectangle2D r ) – zjistit průnik s obdélníkem.
int getWindingRule( ) – zjištění zavíjecího pravidla.
void setWindingRule( int wr ) - nastavení zavíjecího pravidla:
WIND_EVEN_ODD nebo WIND_NON_ZERO.
void moveTo( double x, double y ) - přesun.
void lineTo( double x, double y ) – přidání lineárního segmentu.
void transform( AffineTransform at ) – afinní transformace. WIND_NON_ZERO WIND_EVEN_ODD Uvnitř: právě tehdy je-li počet
polopřímky průsečíků lichý.
Winding rules Uvnitř: právě tehdy nerovná-li se
počet polopřímky průsečíků zleva
počtu průsečíků zprava. Další třídy Point2D - vzdálenost dvou bodů.
Line2D - intersekce s úsečkou a obdélníkem,
- vzdálenost bodu od úsečky a přímky.
Rectangle2D - vytváření minimálního rámce pro bod a obdélník,
- test zda je bod či obdélník uvnitř,
- kde v okolí je bod,
- intersekce s úsečkou.
Ellipse2D - test zda je bod či obdélník uvnitř,
- test zda má průnik s obdélníkem.
Arc2D - test zda je bod či obdélník uvnitř,
- test zda má průnik s obdélníkem.
Area - sjednocení a intersekce oblastí,
- sčítání a odčítání oblastí,
- test zda je bod či obdélník uvnitř.
- afinní transformace.
- test na singularitu, polygonalitu, rektangularitu. PathIterator a FlatteningPathIterator Interfejs PathIterator umožňuje získat obrys objektů typu Shape a
procházet ho po segmentech.
int currentSegment( ... ) – vrátí charakteristiky a typ segmentu SEG_...
typy segmentů jsou int static final
SEG_CLOSE=0, SEG_MOVETO=0,
SEG_LINETO=1, SEG_QUADTO=2, SEG_CUBICTO=3.
int getWindingRule( ) – vrací hodnotu zavíjecího pravidla:
0 - WIND_EVEN_ODD constant.
1 - WIND_NON_ZERO constant.
boolean isDone( ) – konec iterace
void next( ) - další krok
Konkrétní třída FlatteningPathIterator implementuje PathIterator, avšak
zplošťuje nelineární segmenty tak, že je vydává jen jako řadu lineárních.
m02, m12 - translace
m00, m11 - scaling, překlopení
m00, m01, m10, m11 – rotace Afinní transformace Třída AffineTransform vytváří lineární transformátory 2D souřadnic,
které zachovávají úsečky, paralelitu a dělící poměry.
Transformace lze konkatenovat, pre-konkatenovat a invertovat.
Transformovat lze body, pole bodů, pole souřadnic a objekty splňující
interfejs Shape.
Posun ( translation ), škálování ( scaling ), překlopení ( flip ), rotace
( rotation ) a úkos ( shear ) se vyjadřují jedinou matici:
x’ m00 m01 m02 x m00x+
Vloženo: 23.04.2009
Velikost: 863,14 kB
Komentáře
Tento materiál neobsahuje žádné komentáře.
Mohlo by tě zajímat:
Skupina předmětu Y36PJV - Programování v jazyku Java
Reference vyučujících předmětu Y36PJV - Programování v jazyku Java
Podobné materiály
- 01M4 - Matematika 4 - Přednášky Prucha ReseniII
- 01M4 - Matematika 4 - Přednášky Prucha ReseniIII
- X01ALG - Úvod do algebry - Přednášky Horcik
- X01MA1 - Matematika 1 - Přednášky Tkadlec
- X16EKO - Ekonomika - Přednášky ekonomika
- X31EO1 - Elektrické obvody 1 - Přednášky EO1
- X31EO2 - Elektrické obvody 2 - Přednášky (2)
- X31EO2 - Elektrické obvody 2 - Přednášky
- X34ELE - Elektronika - Přednášky
- X36ALG - Algoritmizace - Přednášky algoritmizace
- X02FY1 - Fyzika 1 - Přednášky
- X17TEP - Teorie elektromagnetického pole - prednasky
- 34EL - Elektronika - prednasky
- X36PJV - Programování v jazyku Java - prednasky
- 12TD - Technická dokumentace - prednasky
- X12UEM - Úvod do elektrotechnických materiálů - prednasky od slova do slova
- Y36OMO - Objektové modelování - přednášky
Copyright 2025 unium.cz


