Лабораторна робота №4
Тема: Создание интерфейсов прикладных программ через
взаимодействие объектов в языке Java
(библиотека Swing)
Задание:
На основе классов иерархии, приведенной (или созданной) в ЛР№3 (и в дополнении) создать программу (или апплет), что использует средства библиотеки Swing, стандартной библиотеки создания графического интерфейса для программ на языке Java.
В программе обязательно должны быть стандартные элементы: главное меню, разнообразные кнопки, строки введения информации, панели и др.
Текст программы:
Клас Location
class Location {
private int x, y; // Приватні дані - координати об'єкта
/** Конструктор класу Location */
public Location (int ax, int ay) {
x=ax; y=ay;}
/** Відкриті реалізовані методи класу Location */
public int getX() {return x;}
public int getY() {return y;}
public void setX(int newX) {x=newX;}
public void setY(int newY) {y=newY;}
public void moveBy (int dx, int dy) {x+=dx; y+=dy;}
}
Клас Point
import java.awt.*;
class Point extends Location{
private boolean visible;
private Color col;
public Point (int ax, int ay, Color acol) {
super (ax,ay);
col=acol;
visible=true;
}
/** Відкриті методи об'єкту класу Point */
public boolean isVisible() { return visible; }
public void setVisible(boolean aVis) { visible = aVis; }
public void moveBy(int dx, int dy) {
setVisible(false);
super.moveBy(dx,dy);
setVisible(true);}
public void setColor(Color newCol) { col = newCol; }
public Color getColor() { return col; }
/** Відкритий метод draw, його буде викликати аплет, що містить Точку
* для її відображення у своєму вікні
*/
public void draw(Graphics g) {
if (isVisible()) {
g.setColor(col);
g.drawLine(getX(),getY(),getX(),getY());
}
}
Клас Circle
import java.awt.*;
class Circle extends Point {
private int radius;
public Circle(int ax, int ay, int aradius, Color acol) {
super(ax,ay,acol);
}
public void setRadius(int newRadius) {
radius = newRadius;
}
public int getRadius() {
return radius;
}
public void draw(Graphics g) {
if (isVisible()) {
g.setColor(getColor());
g.drawOval(getX()-radius, getX()-radius, radius*2, radius*2);
}
}
}
Клас Bukva
import java.awt.*;
class Bukva extends Circle {
// масиви вузлових точок
public static int p = 10;
final static int tx[ ] = {-10, 0, 50, 65, 40, 70, 70, 50, 0, -10};
final static int ty[ ] = {15, 0, 0, 50, 80, 100, 150, 170, 170, 160};
double[ ][ ] viewM = {{1, 0}, {0, 1}}; // поточна матриця повороту
int rotation = 0; // кут повороту Букви
/** Конструктор об'єкту Zeta */
public Bukva(int ax, int ay, int aradius, Color acol) {
super(ax, ay, aradius, acol); // Викликаємо конструктор предка - Circle)
}
/** Захищені методи класу Zeta */
protected int getTx(int i) {
return (int) ((tx[i]*viewM[0][0] + ty[i]*viewM[0][1])*getRadius());
}
protected int getTy(int i) {
return (int) ((tx[i]*viewM[1][0] + ty[i]*viewM[1][1])*getRadius());
}
public void rotate(int angle) {
rotation += angle;
viewM[0][0] = Math.cos(Math.toRadians(rotation));
viewM[1][0] = Math.sin(Math.toRadians(rotation));
viewM[0][1] = -viewM[1][0];
viewM[1][1] = viewM[0][0];
}
/** Відкритий метод draw, його буде викликати аплет, що містить букву
* для її відображення у своєму вікні
*/
public void draw(Graphics g) {
int[ ] x, y;
x = new int[tx.length];
y = new int[ty.length];
for (int i=0; i<tx.length; i++) {
x[i] = getX()+getTx(i)/100;
y[i] = getY()+getTy(i)/100;
}
g.setColor(getColor());
g.drawPolyline(x,y,p);
}
}
Файл Аплета Lr4.java
import java.awt.*;
import java.swing.*;
import java.event.*;
import java.util.EventListener;
class Lr4Java extends JFrame {
TLetters Letters;
TPanel panel;
JPanel bPanel;
JButton bleft,bright,bup,bdown,rotateRight,rotateLeft,expandMore, expandLess;
Eventer ev;
class TPanel extends JPanel {
public void paintComponent(Graphics g) {
super.paintComponent(g);
Letters.draw(g);
}
}
class Eventer implements ActionListener {
public void actionPerformed(ActionEvent e) {
if(e.getSource()==bleft) {
Letters.moveBy(-STEP,0);
repaint();
return;
}
if(e.getSource()==bright) {
Letters.moveBy(STEP,0);
repaint();
return;
}
if(e.getSource()==bup) {
Letters.moveBy(0,-STEP);
repaint();
return;
}
if(e.getSource()==bdown) {
Letters.moveBy(0,STEP);
repaint();
return;
}
if (e.getSource()==rotateRight) {
Letters.rotate(STEP);
repaint();
return;
}
if(e.getSource()==rotateLeft)
{
Letters.rotate(-STEP);
repaint();
return;
}
if (e.getSource()==expandMore) {
Letters.setRadius((int)
(Letters.getRadiusO+STEP));
repaint();
return;
}
if (e.getSource()==expandLess) {
Letters.setRadius((int)
(Letters.getRadius()-STEP));
if (Letters.getRadius() < 0) Letters.setRadius(0);
repaint();
return;
}
}
}
public Lr4Java() {
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
}
Letters = new TLetters(100,100,50,new Color(0,200,100),new Color(0,0,0));
ev = new Eventer();
panel = new TPanel();
bPanel = new JPanel();
bleft = new JButton(“Влево”);
bleft.addActionListener(ev);
bright = new JButton(“Bnpaвo”);
bright.addActionListener(ev);
bup = new JButton("BBepx");
bup.addActionListener(ev);
bdown = new JButton(“Вниз”);
bdown.addActionListener(ev);
rotateRight = new JButton ("Повернуть no ЧC");
rotateRight.addActionListener(ev);
rotateLeft = new JButton(“Повернуть nрoтив ЧC”);
rotateLeft.addActionListener(ev);
expandMore = new JButton("Увеличить");
expand-More.addActionListener(ev);
expandLess = new JButton("Уменьшить");
expandLess.addActionListener(ev);
bPanel.setLayout(new GridLayout(8,1));
bPanel.add(bleft);
bPanel.add(bright);
bPanel.add(bup);
bPanel.add(bdown);
bPanel.add(rotateRight);
bPanel.add(rotateLeft);
bPanel.add(expandMore);
bPanel.add(expandLess);
getContentPane().add(panel, BorderLayout.CENTER);
getContentPane().add(bPanel, BorderLayout.EAST);
}
public static void main(String args[]) {
Lr4Java mainFrame = new Lr4Java();
mainFrame.setSize(750, 500);
mainFrame.setTitle("Lr4Java");
mainFrame.setVisible(true);
}
}
Результат виконання роботи:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.