Laboratorium 4
Cel:
Zapoznanie si´ z bibliotekŕ graficznŕ AWT
Praktyczne budowanie aplikacji z GUI
Komponenty biblioteki AWT
Komponentami, które najcz´ciej wykorzystuje si´ do budowania aplikacji wykorzystujŕcych GUI sŕ: Button, Label, TextField, TextArea, Checkbox, List, Choice oraz Canvas. OczywiĘcie w trakcie rozmieszczania komponentów korzysta si´ z kontenerów oraz klas pomocniczych.
Najlepszŕ metodŕ poznania biblioteki AWT jest jej stosowanie. W ramach laboratorium zostanie zbudowana aplikacja o podanym wyglàdzie graficznym.
Menu File posiada nast´pujàce komendy: Open, Save, Exit
Menu Help zawiera komend´: About;
Do aplikacji nale˝y wprowadziç obs∏ug´ zdarzeƒ zwiàzany z wyborami poleceƒ menu. Na polecenia Open i Save powinien pokazaç si´ FileDialog, który pozwala wybraç nazw´ pliku do otwarcia i nazw´ pliku pod który b´dzie zapisany tworzony tekst. Sam proces zapisywania i odczytywania pliku jest poza zakresem tego çwiczenia.
Obs∏uga komendy About z menu Help powinno pokazaç nowe okno dialogowe oparte o klas´ Dialog wyÊwietlajàce informacje o programie.
Osoby, którym starczy czasu mogà wprowadziç obs∏ug´ pozosta∏ych komponentów wyst´pujàcych w oknie aplikacji.
Przyk∏ad rozwiàzania
import java.awt.*;
import java.awt.event.*;
public class AWTTest extends Frame implements ActionListener, ItemListener {
private Choice cFont;
private Checkbox cBold;
private Checkbox cItalic;
private TextArea textArea;
private Checkbox cBlue, cBlack, cRed, cGreen;
public AWTTest() {
super("AWTTest");
setupMenu();
Panel top = new Panel(new GridLayout(1, 2));
Panel topleft = new Panel();
Panel topright = new Panel();
top.add(topleft);
top.add(topright);
topleft.add(new Label("Choose font"));
cFont = new Choice();
cFont.addItem("Helvetica");
cFont.addItem("TimesRoman");
cFont.addItem("Courier");
cFont.addItemListener(this);
topleft.add(cFont);
cBold = new Checkbox("Bold", false);
cBold.addItemListener(this);
topright.add(cBold);
cItalic = new Checkbox("Italic", false);
cItalic.addItemListener(this);
topright.add(cItalic);
add(top, "North");
textArea = new TextArea(10, 60);
add(textArea, "Center");
Panel bottom = new Panel();
CheckboxGroup cbg = new CheckboxGroup();
cBlack = new Checkbox("Black", cbg, true);
cBlack.addItemListener(this);
bottom.add(cBlack);
cRed = new Checkbox("Red", cbg, false);
cRed.addItemListener(this);
bottom.add(cRed);
cGreen = new Checkbox("Green", cbg, false);
cGreen.addItemListener(this);
bottom.add(cGreen);
cBlue = new Checkbox("Blue", cbg, false);
cBlue.addItemListener(this);
bottom.add(cBlue);
add(bottom, "South");
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
pack();
}
protected void setupMenu() {
MenuBar mb = new MenuBar();
setMenuBar(mb);
Menu file = new Menu("File");
mb.add(file);
MenuItem open = new MenuItem("Open", new MenuShortcut(KeyEvent.VK_O));
open.addActionListener(this);
file.add(open);
MenuItem save = new MenuItem("Save", new MenuShortcut(KeyEvent.VK_S));
save.addActionListener(this);
file.add(save);
file.add(new MenuItem("-"));
MenuItem quit = new MenuItem("Quit", new MenuShortcut(KeyEvent.VK_Q));
quit.addActionListener(this);
file.add(quit);
Menu help = new Menu("Help");
mb.setHelpMenu(help);
MenuItem about = new MenuItem("About...");
about.addActionListener(this);
help.add(about);
}
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().startsWith("Open")) {
(new FileDialog(this, "Open", FileDialog.LOAD)).show();
}
else if(e.getActionCommand().startsWith("Save")) {
(new FileDialog(this, "Open", FileDialog.SAVE)).show();
}
else if(e.getActionCommand().startsWith("Quit")) {
System.exit(0);
}
else if(e.getActionCommand().startsWith("About")) {
(new AboutDialog(this)).show();
}
}
public void itemStateChanged(ItemEvent e) {
// any font related change
if (e.getSource()==cFont || e.getSource()==cBold || e.getSource()==cItalic) {
int style = cBold.getState() ? Font.BOLD : Font.PLAIN;
style = style | (cItalic.getState() ? Font.ITALIC : Font.PLAIN);
Font font = new Font(cFont.getSelectedItem(), style, 12);
textArea.setFont(font);
}
else if (e.getSource() == cBlack) {
if (cBlack.getState()) {
textArea.setForeground(Color.black);
}
}
else if (e.getSource() == cRed) {
if (cRed.getState()) {
textArea.setForeground(Color.red);
}
}
else if (e.getSource() == cGreen) {
if (cGreen.getState()) {
textArea.setForeground(Color.green);
}
}
else if (e.getSource() == cBlue) {
if (cBlue.getState()) {
textArea.setForeground(Color.blue);
}
}
}
class AboutDialog extends Dialog {
AboutDialog(Frame frame) {
super(frame, "About...", true);
Panel center = new Panel(new GridLayout(3, 1));
center.add(new Label(" "));
center.add(new Label(" PPOJ - laboratorium 4 "));
center.add(new Label(" "));
add (center, "Center");
Button ok = new Button("OK");
// handle button event in anonymous class
ok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
AboutDialog.this.dispose();
}
});
add(ok, "South");
pack();
}
}
public static void main(String[] args) {
(new AWTTest()).show();
}
}