Dodatki
Dodatki
Dodatek A Unicode
UNICODE jest standardem kodowania znaków na
dwu bajtach, pozwalającym na zdefiniowanie 65536 znaków, bez
potrzeby używania różnych stron kodowych dla alfabetów
narodowych. Dla kodowania w standardzie ASCII (kodowanie na
jednym bajcie) mamy do dyspozycji jedynie 256 znaków i aby
uzyskać litery z różnych alfabetów narodowych, trzeba
stosować strony kodowe
W poniższej tabeli zestawiono znaki Unicode
kodujące polskie litery:
Litera
Kod
Unicode
Litera
Kod
Unicode
Ą
0104
Ó
00D3
ą
0105
ó
00F3
Ć
0106
Ś
015A
ć
0107
ś
015B
Ę
0118
Ź
0179
ę
0119
ź
017A
Ł
0141
Ż
017B
ł
0142
ż
017C
Tabela
6-1 Zestawienie znaków Unicode kodujących polskie litery.
Aby w programie Javy użyć znaków Unicode
stosujemy następującą konwencję:
\ukod_znaku
Przykład:
public void paint(Graphics g)
{
g.drawString("Dzi\u0119kuj\u0119 ",10,10);
}
Powyższa metoda paint()
apletu, drukuje na ekranie słowo Dziękuję.
Znaki Unicode są wyświetlane, jeśli system,
w którym uruchamiane są programy stosujące znaki Unicode
implementuje kodowanie znaków Unicode. W przypadku, gdy w
zbiorze czcionek nie jest dostępny obraz graficzny
reprezentujący dany znak, powinien być wyświetlony
automatycznie znak podobny (np. gdy brak litery Ś wyświetlana
jest litera S ).
Uwaga:
Obecnie standard Unicode nie jest jeszcze
zaimplementowany we wszystkich systemach operacyjnych i
przeglądarkach.
Tabele wszystkich znaków Unicode dostępne są
w Internecie pod adresem: http://www.unicode.org/
Dodatek B Zestawienie różnic między AWT 1.0 a AWT 1.1
obsługa zdarzeń AWT 1.0
obsługa zdarzeń AWT 1.1
Zdarzenie / Metoda
Wygenerowana przez
Interfejs
Metoda
ACTION_EVENT/action
Button, List,
MenuItem, TextField
ActionListener
actionPerformed(ActionEvent)
ACTION_EVENT/action
Checkbox,
CheckboxMenuItem
Choice
ItemListener
itemStateChanged(ItemEvent)
WINDOW_DESTROY
WINDOW_EXPOSE
WINDOW_ICONIFY
WINDOW_DEICONIFY
Dialog, Frame
WindowListener
windowClosing(WindowEvent)
windowOpened(WindowEvent)
windowIconified(WindowEvent)
windowDeiconified(WindowEvent)
windowClosed(WindowEvent)*
windowActivated(WindowEvent)*
windowDeactivated(WindowEvent)*
WINDOW_MOVED
Dialog, Frame
ComponentListener
componentMoved(ComponentEvent)
componentHidden(ComponentEvent)*
componentResized(ComponentEvent)*
componentShown(ComponentEvent) *
SCROLL_LINE_UP
SCROLL_LINE_DOWN
SCROLL_PAGE_UP
SCROLL_PAGE_DOWN
SCROLL_ABSOLUTE
SCROLL_BEGIN
SCROLL_END
Scrollbar
AdjustmentListener
(lub użyj nowej klasy
ScrollPanel)
adjustmentValueChanged(AdjustmentEvent)
LIST_SELECT
LIST_DESELECT
Checkbox,
CheckboxMenuItem
Choice, List
ItemListener
itemStateChanged(ItemEvent)
MOUSE_DRAG
/mouseDrag
MOUSE_MOVE
/mouseMove
Canvas, Dialog,
Frame, Panel,
Window
MouseMotionListener
mouseDragged(MouseEvent)
mouseMoved(MouseEvent)
MOUSE_DOWN /mouseDown
MOUSE_UP /mouseUp
MOUSE_ENTER
/mouseEnter
MOUSE_EXIT /mouseExit
Canvas, Dialog,
Frame, Panel,
Window
MouseListener
mousePressed(MouseEvent)
mouseReleased(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mouseClicked(MouseEvent)*
KEY_PRESS/keyDown
KEY_RELEASE/keyUp
KEY_ACTION /keyDown
KEY_ACTION_RELEASE
/keyUp
Component
KeyListener
keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)*
GOT_FOCUS/gotFocus
LOST_FOCUS/lostFocus
Component
FocusListener
focusGained(FocusEvent)
focusLost(FocusEvent)
brak odpowiednika
w wersji 1.0
ContainerListener
componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
brak
odpowiednika w wersji 1.0
TextListener
textValueChanged(TextEvent)
Uwagi:* brak odpowiednika w wersji 1.0
Tabela
6-2 Tabela konwersji obsługi zdarzeń z wersji AWT 1.0 do 1.1
"Stara" metoda
z AWT 1.0
Klasa w której nastąpiła zmiana
Wymiennik z AWT 1.1
action
Component
actionPerformed
AllowsMultipleSelections
List
isMultipleMode
appendText
TextArea
append
bounds
Component
getBounds
clear
List
removeAll
countComponents
Container
getComponentCount
countItems
Choice, List, Menu
getItemCount
countMenus
MenuBar
getMenuCount
deliverEvent
Component, Container
dispatchEvent
disable()
MenuItem
setEnabled(false)
enable()
Component, MenuItem
setEnabled(true)
enable(expression)
Component
setEnabled(expression)
getBoundingBox
Polygon
getBounds
getClipRect
Graphics
getClipBounds
getCurrent
CheckboxGroup
getSelectedCheckbox
getCursorType
Frame
metoda getCursor w klasie Component
getLineIncrement
Scrollbar
getUnitIncrement
getPageIncrement
Scrollbar
getBlockIncrement
getPeer
Component
No replacement.
GetVisible
Scrollbar
getVisibleAmount
gotFocus
Component
processFocusEvent
HandleEvent
Component
processEvent
Hide
Component
setVisible(false)
insertText
TextArea
insert
insets
Container
getInsets
inside
Component, Polygon,
Rectangle
contains
isSelected
List
isIndexSelected
keyDown
Component
processKeyEvent
KeyUp
Component
processKeyEvent
Layout
Component, Container,
ScrollPane
doLayout
locate
Component, Container
getComponentAt
location
Component
getLocation
lostFocus
Component
processFocusEvent
MinimumSize
Component, Container,
TextArea, TextField
getMinimumSize
mouseDown
Component
processMouseEvent
MouseDrag
Component
processMouseMotionEvent
MouseEnter
Component
processMouseEvent
MouseExit
Component
processMouseEvent
MouseMove
Component
processMouseMotionEvent
MouseUp
Component
processMouseEvent
Move
Component, Rectangle
setLocation
nextFocus
Component, Container,
Window
transferFocus
postEvent
Component, Window
dispatchEvent
preferredSize
Component,Container,
TextArea, TextField
getPreferredSize
replaceText
TextArea
replaceRange
reshape
Component, Rectangle
setBounds
resize
Component, Rectangle
setSize
setCurrent
CheckboxGroup
setSelectedCheckbox
setCursor
Frame
metoda setCursor w klasie Component
setEchoCharacter
TextField
setEchoChar
setLineIncrement
Scrollbar
setUnitIncrement
setMultipleSelections
List
setMultipleMode
setPageIncrement
Scrollbar
setBlockIncrement
show()
Component
setVisible(true)
show(expression)
Component
setVisible(expression)
size
Component
getSize
Tabela
6-3 Zestawienie zmian w AWT 1.1 w porównaniu do AWT 1.0
Uwaga: W tabeli tej zestawione są zmienione
elementy AWT nie uwzględniono tu nowych elementów AWT 1.1.
Dodatek C
Szkielet apletu wielowątkowego
Tworząc nowy aplet w środowisku Visual J++
1.1 możemy skorzystać ze standardowego szkieletu apletu
wielowątkowego, który możemy dowolnie modyfikować. W
przedstawionej w poniższym przykładzie wersji apletu, ładowane
są obrazki, które będą służyły jako klatki animacji. Po
załadowaniu wszystkich obrazków uruchamiany jest aplet.
Ten przykładowy kod, może być przez nas,
oczywiście, wykorzystany w innych środowiskach
programistycznych Javy przy tworzeniu apletów zawierających
animacje lub korzystających z wielowątkowości.
Przykład 6.1 Szkielet apletu wielowątkowego
//***************************************************************
// MultiAplet.java: Applet
//***************************************************************
import java.applet.*;
import java.awt.*;
//===============================================================
// Main Class for applet MultiAplet
//===============================================================
public class MultiAplet extends Applet implements Runnable
{
// THREAD SUPPORT:
// m_MultiAplet is the Thread object for the applet
//-----------------------------------------------------------
private Thread m_MultiAplet = null;
// ANIMATION SUPPORT:
// m_Graphics used for storing the applet's Graphics context
// m_Images[] the array of Image objects for the animation
// m_nCurrImage the index of the next image to be displayed
// m_ImgWidth width of each image
// m_ImgHeight height of each image
// m_fAllLoaded indicates whether all images have been loaded
// NUM_IMAGES number of images used in the animation
//------------------------------------------------------------
private Graphics m_Graphics;
private Image m_Images[];
private int m_nCurrImage;
private int m_nImgWidth = 0;
private int m_nImgHeight = 0;
private boolean m_fAllLoaded = false;
private final int NUM_IMAGES = 18;
// MultiAplet Class Constructor
//-----------------------------------------------------------
public MultiAplet()
{
// TODO: Add constructor code here
}
// APPLET INFO SUPPORT:
// The getAppletInfo() method returns a string describing the
// applet's author, copyright date, or miscellaneous information.
//--------------------------------------------------------------
public String getAppletInfo()
{
return "Name: MultiAplet\r\n" +
"Author: Artur Tyloch\r\n" +
"Created with Microsoft Visual J++ Version 1.1";
}
//The init() method is called by the AWT when an applet is first
//loaded or reloaded. Override this method to perform whatever
// initialization your applet needs, such as initializing data
// structures, loading images or fonts, creating frame windows,
// setting the layout manager, or adding UI components.
//------------------------------------------------------------
public void init()
{
// If you use a ResourceWizard-generated "control creator"
// class to arrange controls in your applet, you may want to
// call its CreateControls() method from within this method.
// Remove the following call to resize() before adding the call
// to CreateControls();
// CreateControls() does its own resizing.
//----------------------------------------------------------
resize(320, 240);
// TODO: Place additional initialization code here
}
// Place additional applet clean up code here. destroy() is
// called when when you applet is terminating and being unloaded.
//-------------------------------------------------------------
public void destroy()
{
// TODO: Place applet cleanup code here
}
// ANIMATION SUPPORT:
// Draws the next image, if all images are currently loaded
//-------------------------------------------------------------
private void displayImage(Graphics g)
{
if (!m_fAllLoaded)
return;
// Draw Image in center of applet
//-----------------------------------------------------------
g.drawImage(m_Images[m_nCurrImage],
(size().width - m_nImgWidth) / 2,
(size().height - m_nImgHeight) / 2, null);
}
// MultiAplet Paint Handler
//--------------------------------------------------------------
public void paint(Graphics g)
{
// ANIMATION SUPPORT:
// The following code displays a status message until all the
// images are loaded. Then it calls displayImage to display the
// current image.
//-----------------------------------------------------------
if (m_fAllLoaded)
{
Rectangle r = g.getClipRect();
g.clearRect(r.x, r.y, r.width, r.height);
displayImage(g);
}
else
g.drawString("Loading images...", 10, 20);
// TODO: Place additional applet Paint code here
}
// The start() method is called when the page containing the
// applet first appears on the screen. The AppletWizard's initial
// implementation of this method starts execution of
// the applet's thread.
//----------------------------------------------------------------
public void start()
{
if (m_MultiAplet == null)
{
m_MultiAplet = new Thread(this);
m_MultiAplet.start();
}
// TODO: Place additional applet start code here
}
// The stop() method is called when the page containing the
// applet is no longer on the screen. The AppletWizard's initial
// implementation of this method stops execution of
// the applet's thread.
//--------------------------------------------------------------
public void stop()
{
if (m_MultiAplet != null)
{
m_MultiAplet.stop();
m_MultiAplet = null;
}
// TODO: Place additional applet stop code here
}
// THREAD SUPPORT
// The run() method is called when the applet's thread is
// started. If your applet performs any ongoing activities without
// waiting for user input, the code for implementing that behavior
// typically goes here. For example, for an applet that performs
// animation, the run() method controls the display of images.
//----------------------------------------------------------------
public void run()
{
m_nCurrImage = 0;
// If re-entering the page, then the images have already
// been loaded.
// m_fAllLoaded == TRUE.
//------------------------------------------------------------
if (!m_fAllLoaded)
{
repaint();
m_Graphics = getGraphics();
m_Images = new Image[NUM_IMAGES];
// Load in all the images
//---------------------------------------------------------
MediaTracker tracker = new MediaTracker(this);
String strImage;
// For each image in the animation, this method first
// constructs a string containing the path to the image file;
// then it begins loading the image into the m_Images array.
// Note that the call to getImage will return before the
// image is completely loaded.
//---------------------------------------------------------
for (int i = 1; i <= NUM_IMAGES; i++)
{
// Build path to next image
//-------------------------------------------------------
strImage = "images/img00" + ((i < 10) ? "0" : "") +
i + ".gif";
m_Images[i-1] = getImage(getDocumentBase(), strImage);
tracker.addImage(m_Images[i-1], 0);
}
// Wait until all images are fully loaded
//----------------------------------------------------------
try
{
tracker.waitForAll();
m_fAllLoaded = !tracker.isErrorAny();
}
catch (InterruptedException e)
{
// TODO: Place exception-handling code here in case an
// InterruptedException is thrown by Thread.sleep(),
// meaning that another thread has interrupted this one
}
if (!m_fAllLoaded)
{
stop();
m_Graphics.drawString("Error loading images!", 10, 40);
return;
}
// Assuming all images are same width and height.
//---------------------------------------------------------
m_nImgWidth = m_Images[0].getWidth(this);
m_nImgHeight = m_Images[0].getHeight(this);
}
repaint();
while (true)
{
try
{
// Draw next image in animation
//-------------------------------------------------------
displayImage(m_Graphics);
m_nCurrImage++;
if (m_nCurrImage == NUM_IMAGES)
m_nCurrImage = 0;
// TODO: Add additional thread-specific code here
Thread.sleep(50);
}
catch (InterruptedException e)
{
// TODO: Place exception-handling code here in case an
// InterruptedException is thrown by Thread.sleep(),
// meaning that another thread has interrupted this one
stop();
}
}
}
// TODO: Place additional applet code here
}
Po uruchomieniu tego apletu na ekranie widzimy
obracającą się kulę ziemską:
Ilustracja 6-1 Obraz działania wygenerowanego przez
Visual J++ 1.1 szkieletu apletu.
Dodatek D
Kod apletu z buforowaniem MojRysownik
Opis patrz punkt.
import java.applet.*;
import java.awt.*;
public class MojRysownik extends Applet implements Runnable
{
private int m_X = 60, m_Y = 50, m_oldX, m_oldY;
private Thread animWatek;
private Font font;
private Graphics buforGraf;
private Image bufor;
private Dimension rozmiarBuf, d;
public void init()
{
d = this.size();
font = new Font("Arial", Font.BOLD, 20);
m_oldX=m_X;
m_oldY=m_Y;
}
public void start()
{
if (animWatek == null) animWatek = new Thread(this,"Rysownik");
animWatek.start();
}
public void stop()
{
if (animWatek != null) animWatek.stop();
animWatek=null;
}
public void run()
{
boolean lewo = true;
while (Thread.currentThread() == animWatek)
{
if (m_X > 110) lewo = true;
if (m_X < 10) lewo = false;
if (lewo)
{ m_X--; m_Y--; }
else
{ m_X++; m_Y++; }
repaint();
try {
Thread.sleep(50);
} catch (InterruptedException e){
}
}
}
private void kolka(Graphics g, int x)
{
for (int i = 0; i<7; i++ )
g.drawOval(x+i*21,30,20,20);
}
public void paint(Graphics g)
{ update(g); }
public void update(Graphics g)
{
// zmiena d przechowuje rozmiar obszaru rysowania na ekranie:
if ( (buforGraf == null) || (d.width != rozmiarBuf.width) || (d.height != rozmiarBuf.height) )
{
rozmiarBuf = d;
bufor = createImage(d.width, d.height);
buforGraf = bufor.getGraphics();
}
buforGraf.setFont(font);
buforGraf.setColor(getBackground());
buforGraf.fillRect(0, 0, d.width, d.height);
buforGraf.setColor(Color.black);
buforGraf.fillRect(10,50,280,25);
buforGraf.setColor(Color.white);
buforGraf.drawString("animacja z buforowaniem", m_X, 20);
buforGraf.setColor(Color.yellow);
buforGraf.drawString("autor: arturt tyloch", 40, m_Y);
buforGraf.setColor(Color.black);
kolka(buforGraf, m_X);
g.drawImage(bufor, 0, 0, this);
}
}
Dodatek E Wersja apletu ZaladujURL z obsługą zdarzeń w modelu
delegacyjnym
Opis
patrz.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class ZaladujURL extends Applet
{
public void init()
{
final Button btnZaladuj = new Button("Zaladuj strone");
final TextField txtCo = new
TextField("http://friko.onet.pl/po/arturt/index.html");
setLayout(new BorderLayout());
add("North",txtCo);
add("Center",btnZaladuj);
btnZaladuj.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent evt)
{
if (evt.getSource() == btnZaladuj)
try
{
getAppletContext().showDocument(new
java.net.URL(getCodeBase()+"tmp.html"),"_self");
}
catch (Exception exc)
{
exc.printStackTrace();
txtCo.setText("Zly adres");
}
}
});
}
}
Wyszukiwarka
Podobne podstrony:
CHEMIA materiały dodatkowe20 Organizacja usług dodatkowych w zakładzie hotelarskim22 Dodatki8 DODATKIwarunki dodatkowe mikro lub kwasyD20152211 zmieniające rozporządzenie w sprawie dodatków do uposażenia zasadniczego żołnierzy zawodowbezkontaktowy dodatkowy dzwonek do telefonu645 Informacja dodatkowa wprowadzenie do sprawozdania finasowegoADNOTACJE krótka, dodatkowa notatka, informacja; dopisek, przypis, przypisekOpinia Europejskiego Komitetu Ekonomiczno Społecznego w sprawie GMO w UE (opinia dodatkowa)inf dodatkWyższa emerytura bez dodatkowego oszczędzaniaPeugeot 508 napełnianie zbiornika dodatku(1)znaki drogowe dodatkoweDodatki do emerytur i rentwięcej podobnych podstron